转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/16118955
简介
1、协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析。
2、TCP/IP协议族有IP协议、TCP协议和UDP协议。
3、TCP协议和UDP协议使用的地址叫做端口号,用来区分同一主机上的不同应用程序。TCP协议和UDP协议也叫端到端传输协议,因为他们将数据从一个应用程序传输到另一个应用程序,而IP协议只是将数据从一个主机传输到另一个主机。
4、在TCP/IP协议中,有两部分信息用来确定一个指定的程序:互联网地址和端口号:其中互联网地址由IP协议使用,而附加的端口地址信息则由传输协议(TCP或UDP协议)对其进行解析。
5、现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议),其中通过数据报套接字,应用程序一次只能发送最长65507个字节长度的信息。
6、一个TCP/IP套接字由一个互联网地址,一个端对端协议(TCP协议或UDP协议)以及一个端口号唯一确定。
7、每个端口都标识了一台主机上的一个应用程序,实际上,一个端口确定了一个主机上的一个套接字。主机中的多个程序可以同时访问同一个套接字,在实际应用中,访问相同套接字的不同程序通常都属于一个应用(如web服务程序的多个副本),但从理论上讲,它们可以属于不同的应用。
基本套接字
1、编写TCP客户端程序,在实例化Socket类时,要注意,底层的TCP协议只能处理IP协议,如果传递的第一个参数是主机名字而不是你IP地址,Socket类具体实现的时候会将其解析成相应的地址,若因为某些原因连接失败,构造函数会抛出一个IOException异常。
2、TCP协议读写数据时,read()方法在没有可读数据时会阻塞等待,直到有新的数据可读。另外,TCP协议并不能确定在read()和write()方法中所发送信息的界限,接收或发送的数据可能被TCP协议分割成了多个部分。
3、编写TCP服务器端的程序将在accept()方法处阻塞,以等待客户端的连接请求,一旦取得连接,便要为每个客户端的连接建立一个Socket实例来进行数据通信。
4、在UDP程序中,创建DatagramPacket实例时,如果没有指定远程主机地址和端口,则该实例用来接收数据(尽管可以调用setXXX()等方法指定),如果指定了远程主机地址和端口,则该实例用来发送数据。