热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

你必须知道的261个Java语言问题笔记-Java网络编程

什么是TCPIP,什么是IPTCPIP:是TransmissionControlInternetProtocol缩写,即传输控制协议国际互联协议,它是Internet国际互联网络的基础。该
什么是TCP/IP,什么是IP
TCP/IP:是Transmission Control/Internet Protocol缩写,即传输控制协议/国际互联协议,它是Internet
国际互联网络的基础。
该组协议主要包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP和TFTP等。
TCP(Transmission Control Protocol)传输控制协议;
IP(Internet Protocol)网际协议;
UDP(User Datagram Protocol)用户数据协议;
ICMP(Internet Control Messaged Protocol)互联网控制信息协议;
SMTP(Simple Mail Transfer Protocol)简单邮件传输协议;
SNMP(Simple Network manage Protocol)简单网络管理协议;
FTP(File Transfer Protocol)文件传输协议;
ARP(Address Resolation Protocol)地址解析协议;
TCP/IP通常被看成一个4层模式:应用层、传输层、网络层、网络接口层。
1应用层:向用户提供一组常用的应用程序;
2传输层:提供应用程序间的通信,包括格式化信息流和提供可靠传输等;
3网络层:TCP/IP协议族中非常关键的一层,负责相邻计算机之间的通信,主要定义了IP地址格式,
从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。
4网络接口层:TCP/IP软件的最底层,负责接收IP数据包并通过网络进行发送,或者从网络上接收
物理帧,抽出IP数据报,交给IP层。
什么是IP
IP协议又称互联网协议,是支持网间互连的数据报协议,它与TCP协议一起构成了TCP/IP协议族的核心。
它提供网间连接的完善功能,包括IP数据报规定互连网络范围内的IP地址格式。

TCP和UDP有什么区别
TCP(Transmission Control Protocol)是传输控制协议,UDP(User Datagram Protocol)是用户数据报协议。
TCP和UDP均属于传输层协议。
TCP对应的是可靠性要求高的应用,UDP对应的是可靠性要求低,传输经济的应用;
TCP支持的应用协议主要有Telnet、FTP、SMTP等;UDP支持的应用层协议主要有NFS(网络文件系统)、
SNMP(简单网络管理协议),DNS(主域名称系统)和TFTP(通用文件传输协议)等。

什么是HTTP,HTTP的工作原理如何
HTTP(Hypertext Transfer Protocol)被称为超文本传输协议,用于控制万维网服务器和本地浏览器
之间的超文本信息传送。
http://www.baidu.com/china/index.html:该地址就是URL(Uniform Resource Locator),即统一资源定位符。
http://代表访问服务器的协议;
www代表一个Web服务器;
baidu.com/代表Web服务器的域名,或者服务器站点的名称;
china/代表服务器上的一个子目录;
index.html代表China目录中的一个HTML文件。
HTTP工作原理及主要过程:
发送请求-响应请求-处理响应
HTPP请求和响应格式:
消息的格式:由一个起始行、一个或者多个头域、一个指示头域结束的空行和可选的消息组成。
HTTP头域包括:通用头、请求头、响应头和实体头4个部分。
每个头域由一个域名,冒号和域值3部分组成。
域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始
处,使用至少一个空格或制表符。
请求信息的格式:
GET http://download.microtool.de:80/somedata.exe
Host:download.microtool.dc
Accept:*/*
Pragma;no-cache
Cache-Control:no-cache
Referer:http://download.microtool.de/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-
GET:GET方式的请求
Host:头域执行请求资源所在的服务器或网关的位置;
Referer:头域允许客户端指定URI的资源源地址;
Range:头域可以请求实体的一个或者多个子范围;
User-Agent:头域的内容包含发出请求的用户信息。
响应消息的格式:
HTRP/1.0200OK
Date:Mon,31Dex200104:25:57GMT-响应时间
Server:Apache/1.3-服务器信息
Content-type:text/html-响应信息的格式及类型
Last-modified:Tue,17-上次修改时间
Content-length:234324-响应信息大小,以字节为单位
Content-range:bytes554554-40279979-响应信息的范围

在Socket通信时如何获取主机和客户机的IP地址
Java提供了一个java.netInetAddress类,该类用于表示互联网协议(IP)地址。
String getHostAddress():获取IP地址字符串
String getHostName():获取IP地址的主机名
InetAddress getLocalHost():获取本地主机的InetAddress对象
InetAddress getByName(String host):在给定主机名的情况下,返回InetAddress对象。

如何利用Socket实现基于TCP的通信
基于TCP协议实现两台计算机之间的通信:主要使用Socket和ServerSocket类。
Socket类用于实现客户端套接字,套接字是两台计算机之间的通信端点。
//创建一个流套接字并将其连接到指定主机上的指定端口号
public Socker(String host,int port)throws UnknownHostException,IOException
//返回套接字连接到的远程IP地址
public InetAddress getInetAddress()
//返回将字节写入此套接字的输出流
publi OutputStream getOutputStream() throws IOException
//返回从此套接字读取字节的输入流
public InputStream getInputStream() throws IOException
//关闭此套接字,与此套接字有关联的通道也将关闭
public void close() throws IOException
ServerSocket类用于实现服务器套接字,提供TCP服务。
//创建绑定到特定端口的服务套接字
public ServerSocket(int port) throws IOException
//侦听并接收到此套接字的连接,此方法在进行连接之前一直阻塞
public Socket accept() throws IOException
//关闭此套接字,与此套接字有关联的通道也将关闭
public void close() throws IOException

如何利用Socket传输中文字符
在网络中串递的信息为字节,因此发送的字符需要编码为字节。如果开发者不指定编码类型,将
采用默认的ISO-8859-1。
方法一:使用DataOutputStream的writeUTF()方法发送信息。
使用DataInputStream的readUTF()方法接受信息。
方法二:使用Writer字符流发送信息。
使用Reader字符流接收信息。
在使用字符刘发送和接收信息时,需要使用统一的编码。

如何在Socket读取数据时使用超时设置
Java1.4在Java API中加入了NIO技术,NIO支持非阻塞I/O(non-blocking I/O)操作。
首先需要创建一个Socket对象,然后通过setSoTimeOut()方法设置所期望的超时时间,单位是毫秒。
当设置超时后,输入流如果超过了指定的时间还读不到任何数据,程序将抛出一个java.io.Interrupt
edIOException异常,可以捕获该异常并决定是否尝试进行另一次读取操作。

如何利用Socket传递对象信息
在Socket通信时,可以用对象将传输的信息封装,然后以对象为单位在网络中进行传输。
注意:由于消息对象要在网络中传递,因此消息类必须实现序列化。

如何利用Socket实现文件传输
利用Socket传输文件与传输字符信息的过程非常相似,只不过在传输文件过程中添加了读写文件的操作。

如何利用Socket实现基于UDP的通信
基于UDP协议实现两台计算机之间的通信:蛀牙使用DatagramSocket和DatagramPacket类。
DatagramSocket类表示用来发送和接收数据报包的套接字。数据报套接字是包投递服务的发送和
接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。
DatagramSocket总是启用UDP广播发送。为了接收广播包,应该将DatagramSocket绑定到通配符地址。
DatagramSocket类的重要方法:
//创建数据报套接字并将其绑定到本地主机上的指定端口
public DatagramSocket(int port) throws SocketException
//将套接字连接到此套接字的远程地址
//当套接字连接到远程地址时,包就只能从该地址发送或接收,默认情况下不连接数据报套接字
//如果套接字要连接的远程目标不存在或不可到达,那么可能会抛出PortUnreachableException
public void connect(InetAddress address,int port)
//从此套接字接收数据报包,此方法在接收到数据报前一直阻塞
public void receive(DatagramPacket p) throws IOException
//从此套接字发送数据报包
public void send(DatagramPacket p) throws IOException
//断开套接字的连接
public void disconnect()
DatagramPacket类的重要方法:
//创建数据报包,用来将长度为length的包发送到指定主机上的指定端口号
public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
//返回将要发送或接收到的数据报中数据快得字节大小
public int getLength()
//得到接收数据报中的数据
public byte[] getData()
//为发送者提供一个InetAddress对象
public InetAddress getAddress()
//得到UDP端口
public int getPort()

如何获取Internet资源的大小
需要使用java.net包下的URL类和URLConnection类。
java.net.URL类代表一个统一资源定位符,它是指向互联网资源的指针。
java.net.URLConnection类代表应用程序和URL之间的通信链接。此类的实例可用于读写URL所引用的资源。
穿件一个到URL的连接的步骤:
通过在URL上调用openConnection()方法创建连接对象;
设置操作参数和一般请求属性;
使用connect()方法建立到远程对象的实际连接。
远程对象变为可用。远程对象的头字段和内容变为可访问。

如何实现Internet资源的单线程下载
URLConnection类可实现网络资源的读取和写入功能:
//打开与URL引用的资源的通信链接
public abstract void connect() throws IOException
//返回URL引用的资源的内容长度,如果内容长度未知,则返回-1
public int getConnectionLength()
//返回URL引用的资源的内容编码,或者如果编码为未知,则返回null
public String getContentEncoding()
//返回从此打开的连接读取的输入流
public InputStream getInputStream() throws IOException
//返回写入此连接的输出流
public OutputStream getOutputStream() throws IOException

URL如何通过proxy代理访问Internet资源
对于没有直接连接到Internet网络,不能直接用java.net.URL访问网络上资源。
在这种情况下,需要为java.net.URL指定代理服务器:
//获取系统属性集合
Properties prop = System.getProperties();
//设置代理服务的地址
prop.put("http.proxyHost","172.16.0.10");
//设置代理服务服务端口
prop.put("http.proxyPort","11080");

如何实现Internet资源下载的断点续传
断点续传原理:在每次发送请求时,将上次断点的位置通过"RANGE"参数设定,实现资源的继续访问。

如何实现Internet资源的多线程下载
多线程下载的示例由MultiDownload和DownThread两个类构成:
Downthread类:是一个下载线程,该线程在启动时需要指定下载文件的URL,下载起始点和下载结束点
等参数。下载过程中利用RandomAccessFile类将下载的内容写入目标文件,通过RandomAccessFile类
的seek()方法可以指定写入目标文件的起始位置。
MultiDownload类:获取下载文件的大小,并根据指定的线程数量计算出每一个线程应该下载的起始点
和结束点,然后创建并启动线程。

如何解析Internet网页内容
解析网页内容的重要思路:首先使用URL类和URLConnection类获取指定网页的流信息,然后使用字符

串切割或正则表达式技术将需要的信息获取。

注:本章的代码实例见原书,码起来太麻烦
推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 本文介绍了在Windows系统下安装Python、setuptools、pip和virtualenv的步骤,以及安装过程中需要注意的事项。详细介绍了Python2.7.4和Python3.3.2的安装路径,以及如何使用easy_install安装setuptools。同时提醒用户在安装完setuptools后,需要继续安装pip,并注意不要将Python的目录添加到系统的环境变量中。最后,还介绍了通过下载ez_setup.py来安装setuptools的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • DSP中cmd文件的命令文件组成及其作用
    本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。 ... [详细]
  • 本文介绍了网络编程的要点,包括InetAddress类获取IP地址的方法,IP地址的定义和表示方法,IPv4和IPv6的区别,以及网络通信协议中的端口和协议类型。 ... [详细]
author-avatar
yklyh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有