java 网络编程学习资料

java 网络编程学习资料

ID:1356842

大小:1.19 MB

页数:63页

时间:2017-11-10

java 网络编程学习资料_第1页
java 网络编程学习资料_第2页
java 网络编程学习资料_第3页
java 网络编程学习资料_第4页
java 网络编程学习资料_第5页
资源描述:

《java 网络编程学习资料》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Socket简介协议简介1.协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析。2.TCP/IP协议族有IP协议、TCP协议和UDP协议。3.TCP协议和UDP协议使用的地址叫做端口号,用来区分同一主机上的不同应用程序。TCP协议和UDP协议也叫端到端传输协议,因为他们将数据从一个应用程序传输到另一个应用程序,而IP协议只是将数据从一个主机传输到另一个主机。4.在TCP/IP协议中,有两部分信息用来确定一个指定的程序:互联网地址和端口号:其

2、中互联网地址由IP协议使用,而附加的端口地址信息则由传输协议(TCP或UDP协议)对其进行解析。5.现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议),其中通过数据报套接字,应用程序一次只能发送最长65507个字节长度的信息。6.一个TCP/IP套接字由一个互联网地址,一个端对端协议(TCP协议或UDP协议)以及一个端口号唯一确定。7.每个端口都标识了一台主机上的一个应用程序,实际上,一个端口确定了一个主机上的一个套接字。主机中的多个程序可以同时访问同一

3、个套接字,在实际应用中,访问相同套接字的不同程序通常都属于一个应用(如web服务程序的多个副本),但从理论上讲,它们可以属于不同的应用。基本套接字1.编写TCP客户端程序,在实例化Socket类时,要注意,底层的TCP协议只能处理IP协议,如果传递的第一个参数是主机名字而不是你IP地址,Socket类具体实现的时候会将其解析成相应的地址,若因为某些原因连接失败,构造函数会抛出一个IOException异常。2.TCP协议读写数据时,read()方法在没有可读数据时会阻塞等待,直到有新的数据可读。另外,TCP协

4、议并不能确定在read()和write()方法中所发送信息的界限,接收或发送的数据可能被TCP协议分割成了多个部分。3.编写TCP服务器端的程序将在accept()方法处阻塞,以等待客户端的连接请求,一旦取得连接,便要为每个客户端的连接建立一个Socket实例来进行数据通信。4.在UDP程序中,创建DatagramPacket实例时,如果没有指定远程主机地址和端口,则该实例用来接收数据(尽管可以调用setXXX()等方法指定),如果指定了远程主机地址和端口,则该实例用来发送数据。5.UDP程序在receive

5、()方法处阻塞,直到收到一个数据报文或等待超时。由于UDP协议是不可靠协议,如果数据报在传输过程中发生丢失,那么程序将会一直阻塞在receive()方法处,这对客户端来说是肯定不行的,为了避免这个问题,我们在客户端使用DatagramSocket类的setSoTimeout()方法来制定receive()方法的最长阻塞时间,并指定重发数据报的次数,如果每次阻塞都超时,并且重发次数达到了设置的上限,则关闭客户端。6.UDP服务器为所有通信使用同一套接字,这点与TCP服务器不同,TCP服务器则为每个成功返回的ac

6、cept()方法创建一个新的套接字。1.在UDP程序中,DatagramSocket的每一次receive()调用最多只能接收调用一次send()方法所发送的数据,而且,不同的receive()方法调用绝对不会返回同一个send()方法所发送的额数据。2.在UDP套接字编程中,如果receive()方法在一个缓冲区大小为n的DatagramPscket实例中调用,而接受队列中的第一个消息长度大于n,则receive()方法只返回这条消息的前n个字节,超出的其他字节部分将自动被丢弃,而且也没有任何消息丢失的提示

7、。因此,接受者应该提供一个足够大的缓存空间的DatagramPacket实例,以完整地存放调用receive()方法时应用程序协议所允许的最大长度的消息。一个DatagramPacket实例中所运行传输的最大数据量为65507个字节,即UDP数据报文所能负载的最多数据,因此,使用一个有65600字节左右缓存数组的数据总是安全的。3.在UDP套接字编程中,每一个DatagramPacket实例都包含一个内部消息长度值,而该实例一接收到新消息,这个长度值便可能改变(以反映实际接收的消息的字节数)。如果一个应用程序

8、使用同一个DatagramPacket实例多次调用receive()方法,每次调用前就必须显式地将消息的内部长度重置为缓冲区的实际长度。4.另一个潜在问题的根源是DatagramPacket类的getData()方法,该方法总是返回缓冲区的原始大小,忽略了实际数据的内部偏移量和长度信息。JavaTCPSocket编程TCP的Java支持协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。