系列文章目录
tcp服务器端
完成tcp服务器功能,需要的流程如下:
- socket创建一个套接字
- bind绑定ip和port
- listen使套接字变为可以被动链接
- accept等待客户端的链接
- Recv/send接收发送数据
(注:服务器都是要绑定端口的,要先固定端口)
操作:
第一个套接字是服务器用来监听的,只负责接收消息,在它接收到客户端的数据后,它的使命就完成了,只需要等待下一个客户端发送数据过来就行。第二个套接字才是服务器回复使用的,如果有多个用户,就还会有第三个套接字,第四个套接字来回复数据。但是第一个套接字始终只用来接收客户端的数据。
所以在我们运行的程序的时候会堵塞
要解堵的话,就需要在服务器端回一下消息即可
代码:
import socket
def main():
# 1. 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 绑定本地信息 bind
tcp_server_socket.bind(("", 7890))
# 3 .让默认的套接字有主动变为被动 listen,这样就可以接收别人的数据了
tcp_server_socket.listen(128)
print("----1----")
# 4. 等待客户端链接 accept
# new_client_socket用来为这个客户端服务
# tcp_server_socket就可以省下来专门等待其他客户端的链接
new_client_socket, client_addr = tcp_server_socket.accept()
print("---2---")
print(client_addr)
# 接收对方发送过来的数据
recv_data = new_client_socket.recv(1024)
# 接收1024个字节
print("接收到的数据为:", recv_data.decode("utf-8"))
# 回送一些数据给客户端
new_client_socket.send("thank you ".encode("utf-8"))
new_client_socket.close()
tcp_server_socket.close()
if __name__ == "__main__":
main()
小结:在运行的时候,都是服务器先运行,先有服务器,才会有客户来访问,上面服务器之所以会堵塞,是因为服务器要先等客户端发送数据,客户端才能回复数据,就好比我们平时登录QQ,都是我们先输入账号密码,点击登录,等待服务器回复,我们才能成功登录
下面介绍一下服务器循环为多个用户端服务:
操作:
在这里添加一个while循环,这里tcp_server_socket必须要放在循环外,上面说过,这个套接字是负责监听的,用来循环为多个客户端服务
可以同时开通两个网络调试助手的窗口进行练习操作:
控制台接收消息:
版权声明:本文为arizia原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。