如何用python建立TCP服务端
网络通信方式主流的方式有UDP和TCP两种。
UDP的方式传输数据没有服务端和客户端的区分,只要指定对方的IP和端口,就可以往指定的目标发送数据。
而TCP的方式往往区分客户端和服务端,服务端绑定具体的IP和端口的地址信息后,客户端可以根据该地址信息对服务端进行连接。服务端先用listen()方法开启监听,然后用accept()方法等待客户端连接,形成阻塞。待客户端连接后,服务端可以解除阻塞并且接收到客户端的套接字和地址信息,根据套接字信息服务端可以读取客户端发送的数据内容,同时可以回复客户端具体的响应。
下面,用python建立一个TCP的服务端,演示客户端连接服务端之后的数据通信过程:
第一步,先定义服务端如何根据客户的套接字进行数据的读取和响应:
第二步,定义服务端的主程序,先创建一个tcp的socket对象,然后绑定端口,开启监听,等待客户单连接,连接建立之后再把取得的客户端套接字传入第一步建立起来的函数进行数据处理和响应。
所有代码如下:
import socket # 先定义一个模拟处理客户端数据的程序 def service_client(new_socket): """通过传入的socket对象为这个客户端返回数据""" # TCP方式取得客户发送的数据: request=new_socket.recv(1024).decode("utf-8") print("客户端请求的数据: %s" % request) # 准备发送数据给客户端 response="ok,I see your request!" # TCP方式的socket采用send方法 new_socket.send(response.encode("utf-8")) print("服务器发送的数据: %s" % response) |
def main(): """用来完成整体的控制""" # 1.创建套接字,TCP套接字和UDP套接字的参数差别在于第二个参数为socket.SOCK_STREAM tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2.绑定端口,TCP Server需要绑定端口,以便客户端可以连接到这个server tcp_server_socket.bind(("",8891))
# 3.变为监听套接字,传入参数128 tcp_server_socket.listen(128) # 4.等待客户端的连接,采用accept方法形成阻塞,等待客户端连接, # 客户端连接后接收到一个客户端的套接字和客户端地址信息 new_socket,client_addr=tcp_server_socket.accept() # 5.为这个客户端服务 service_client(new_socket) new_socket.close() tcp_server_socket.close() main() |
第三步,上述代码执行之后,进程处于阻塞状态等待客户端连接,这时候,打开“网络调试助手”(百度搜索网络调试助手可以下载)
服务端处理程序打印出来的内容:
本文演示程序只能处理一条客户端的请求,如果需要连续监听客户端的请求,则需要在服务端添加While True代码,让服务端可以一直运行等待客户端请求。
总结:TCP的连接需要服务端和客户端,服务端需要开启监听并进入阻塞状态,等待客户端连接。客户端连接之后,服务端可以取得客户端的socket和地址,服务端可以根据客户端的socket接收客户端数据并回复服务端的响应。