赞
踩
使用Python可以很简单地创建一个TCP服务器程序,该TCP服务器的程序目的是完成这个功能:TCP客户端发送一段字符串给TCP服务端,TCP服务端将字符串原路返回去。
我是从该B站视频教程学习python的socket编程:
https://www.bilibili.com/video/BV1Xx411R743?spm_id_from=333.999.0.0
import socket def main(): # 创建套接字tcp_Server_Socket tcp_Server_Socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 绑定本地信息 tcp_Server_Socket.bind(("",7890)) # 套接字对象tcp_Server进入监听状态,等待TCP客户端建立链接,最大连接数为1 tcp_Server_Socket.listen(1) while True: print("等待一个新的客户端的到来:") # 等待TCP客户端的连接 new_Client_Socket,client_addr = tcp_Server_Socket.accept() print("一个新的客户端已经到来:%s" % str(client_addr)) # 循环目的:为同一个客户端服务多次,直到客户端断开连接 while True: # 进入阻塞态,等待TCP客户端发送字符串(最大1024个字节)过来 recv_data = new_Client_Socket.recv(1024) # 打印信息到控制台 print("客户端送过来的请求是: %s" % recv_data.decode("utf-8")) # 解除阻塞有两种情况: if recv_data: # 将数据发回去之前增加一个换行 recv_data += "\n".encode("utf-8") # 将收到的字符串原路返回给TCP客户端 new_Client_Socket.sendall(recv_data) else: print(client_addr,"disconnected") # TCP客户端断开连接,打印信息。 break new_Client_Socket.close() print("已经为客户端服务完毕.") tcp_Server_Socket.close() #可选,它永远不会被执行 if __name__ == "__main__": main()
在ubuntu使用网络调试助手mNetAssist可以方便地测试socket程序,它可以充当TCP服务器,TCP客户端,UDP收发。
接着,点击“连接网络”。TCP服务器检测到有TCP客户端连接过来,表示TCP服务器与TCP客户端建立连接成功,可以发送字符串了。
最后,使用网络调试助手(TCP客户端)发送一串字符串“Hello,World"给TCP服务器。TCP服务器接收到”Hello,World"之后,将"Hello,World返回给TCP客户端。
最后,TCP客户端断开连接。TCP服务器会继续等待下一个TCP客户端的连接。
此时,TCP客户端也可以再次连接TCP服务器。
至此,使用python3开发的TCP服务器程序完成。
先说明一下,new_Client_Socket.recv(1024)就是阻塞的位置。TCP服务器跟TCP客户端建立连接后,TCP服务器会马上进入接收的状态(阻塞),直到TCP客户端发送消息过来(解阻塞)才开始执行后续的程序。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。