首页 > 代码库 > 网络编程(二)
网络编程(二)
一.TCP(Transmission Control Protocol 传输控制协议)协议
1.TCP协议概述:
TCP是一种可靠的,面向连接的,端对端的网络协议。
TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。
TCP协议使用重发机制-当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体的确认信息,如果没有收到确认信息,则会再次重发刚才发送的信息,因此通过这种重发机制,TCP协议向应用程序提供了可靠的通信连接。
2.TCP协议如何建立连接:
TCP协议通过“三次握手”建立连接,当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认,这种建立连接的方法可以防止产生错误的连接。
"三次握手"过程如下:
1.客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态
2.服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态
3.客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
二.服务器端Socket
Java中接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状态。方法如下:
Socket accept():如果收到客户端的连接请求,该方法将返回一个与客户端对应的Socket
构造方法:ServerSocket ss = new ServerSocket(8000); //8000为端口号,未指定IP,默认绑定本机IP
设置超时:
连接,读取操作超过合理时间后,系统判定为操作失败,主要作用是避免执行网络连接,读取服务器数据的进程一直阻塞。
setSoTimeout(time); //time为超时时间
Socket s = new Socket("127.0.0.1",8000);
s.setSoTimeout(10000);
三.客户端Socket
客户端通常使用Socket来连接到指定服务器,Socket有下面两个构造方法
Socket(InetAddress/String remoteAddress,int port) //较为简便,常用
Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,int localPort)
//这个构造器不仅指定远程主机IP和端口,还指定了本地IP和端口,适用于本机主机有多个IP的情况
Socket s = new Socket("127.0.0.1",8000);
四.建立连接后的数据通信
客户端,服务器端产生对应的Socket之后,连接便已建立,程序无须再区分服务器端和客户端,而是通过各自的Socket进行通信,Socket提供了输入流和输出流来发送和接受数据:
InputStream getInputStream() 返回该Socket对应的输入流,让程序通过该输入流从Socket中取出数据
OutputStream getOutputStream() 返回该Socket对应的输出流,让程序通过该输出流向Socket输出数据
网络编程(二)