TCP协议通讯流程
服务器调用socket(),bind(),listen()完成初始化,调用accept()完成阻塞等待,使服务器处于监听端口状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。
数据传输过程:
建立连接后,服务器从accept()返回后立刻调用read(),读socket就行读管道一样,如果没有数据到达就阻塞等待,这是客户端调用write()发送请求服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次掉用read()阻塞等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去。
如果客户端没有更多的请求了,就调用close()关闭连接,就像写端关闭的管道一样,服务器的read()返回0,这样服务器就知道客户端关闭了连接,也调用close()关闭连接。任何一方调用close()后,连接的两个运输方向都关闭,不能再发送数据了。如果一方调用shutdown()则连接处于半关闭状态,扔可接受对方发送来的数据。