理解socket库与开发流程(tcp)(1)

socket (简称:套接字),它是一个进程之间的一个工具,进程之间想要进行网络通讯就需要socket

socket的作用是负责进程之间的网络数据传输

 

tcp网络应用程序分为:客户端和服务端(俗称:服务器)

一、客户端与服务器数据交换流程图:(图借用于https://blog.csdn.net/qq_37200329/article/details/100065914)

解析(客户端):socket():是socket库的方法     connect():建立链接     recv():是接收数据        send():发送数据

解析(服务端):socket():是socket库的方法     bind():绑定端口号    listen():设置监听 、    accept():等待链接,没有接收到链接的时候会一直等待     recv():是接收数据     send():发送数据

客户端:流程   创建客户端套接字对象、建立链接、发送数据、接收数据、关闭客户端套接字

服务端流程:  创建服务端套接字对象、绑定端口、设置监听、等待客户端请求、发送数据、接收数据、关闭服务端套接字

问题:在与服务端连接中突然出现问题,例如服务端突然中断(不论是出现问题导致的中断),那么服务端的端口不会被立即被释放,而是需要等待1-2分钟

解决方法:1、更换服务器端端口号  (即:修改端口代码)    2、设置端口号的复用(即端口立即释放)

如何设置端口号复用呢:

方法:在设置bind()之前,设置

server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

socket.SOL_SOCKET:表示当前套接字

socket.SO_REUSEADDR:表示复用端口的选项

True:确认复用

 

关于TCP  socket文字注意点:

1、客户端与服务器端想要进行通信的时候,必须建立链接

2、客户端可以不绑定端口号,但客户端必须建绑定端口,不然客户端是找不到服务端程序

3、listen后的套接字,只负责等待连接请求,·收发信息是(服务端)新的套接字来处理(accept()方法返回)

4、关闭listen后的套接字,不再建立链接 (新的客户端),正在通信的客户端还是正常的

5、关闭accept()的套接字,则意味着客户端已经通信完毕

6、当客户端套接字调用了close方法后,服务端的recv会解除阻塞,返回字段为0.服务端可以通过数据长度来判断客户端是否已经下线。反之服务器的返回数据为0,客户端的recv也会解除阻塞,返回的数据的长度也为0

 

 

 

 


版权声明:本文为weixin_41816911原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。