1.TCP服务端与客户端应答流程
有关TCP通信流程可参考这位大佬的博客:
TCP协议客户端与服务器端一般的通信过程_squack的博客-CSDN博客_客户端和服务器
注意:当客户端的套接字调用close后,服务器会解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线。
2.简单数据传输案例
服务器端代码:
from socket import *
#1.创建套接字
server_socket = socket(AF_INET,SOCK_STREAM)
#2.绑定IP和端口
host_port = ('',8080)
server_socket.bind(host_port)
#3.listen()让Socket处于被动,就可以接收客户端的连接请求,1指客户端挂起的数量
server_socket.listen(1)
#4.等待客户端的连接请求,accept()是线程阻塞函数
#会返回两个值,第一个是新的socket用于和当前客户端交互
new_socket,client_addr = server_socket.accept()
#5.服务器接收客户端发过来的数据
#recv一般用于TCP,recvfrom用于UDP,因为UDP不建立连接
data = new_socket.recv(1024) #data是字节数据
print("服务器接收的数据是:",data.decode('utf-8'))
#6.服务器给客户端发送数据
new_socket.send('Thand you!'.encode('utf'))
new_socket.close() #局部关闭,关闭当前客户端的服务
server_socket.close() #关闭整个服务器
客户端代码:
from socket import *
client_socket = socket(AF_INET,SOCK_STREAM)
server_ip_port = ('10.175.193.126',8080)
#客户端发送连接请求
client_socket.connect(server_ip_port)
send_data = input("请输入:")
client_socket.send(send_data.encode('utf-8'))
#接收服务器返回的数据
recv_data = client_socket.recv(1024)
print("客户端接收到的数据为:",recv_data.decode('utf-8'))
client_socket.close()
运行结果: