Python 绝技 —— TCP 服务器与客户端

  • 时间:
  • 浏览:34
  • 来源:sunbet官网
#!/usr/bin/env python3 # -*- coding: utf-8 -*- #公众号:python学习开发 import socket import threading def tcplink(conn, addr): print( "Accept new connection from %s:%s" % addr) conn.send(b "Welcome!\n" ) while True : conn.send(b "What's your name?" ) data = conn.recv(1024) if data == b "exit" : conn.send(b "Good bye!\n" ) break conn.send(b "Hello %s!\n" % data) conn. close () print( "Connection from %s:%s is closed" % addr) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(( "127.0.0.1" , 6000)) s.listen(5) print( "Waiting for connection..." ) while True : conn, addr = s.accept() t = threading.Thread(target = tcplink, args = (conn, addr)) t.start() Line 6:定义一个 tcplink() 函数,第一个 conn 参数为服务器与客户端交互数据的套接字对象,第二个 addr 参数为客户端的 IP 地址与端口号,用二元组 (host, port) 表示。 Line 8:连接成功后,向客户端发送欢迎信息 b"Welcome!\n"。 Line 9:进入与客户端交互数据的循环阶段。 Line 10:向客户端发送询问信息 b"What's your name?"。 Line 11:接收客户端发来的 bytes 对象。 Line 12:若 bytes 对象为 b"exit",则向客户端发送结束响应信息 b"Good bye!\n",并结束与客户端交互数据的循环阶段。 Line 15:若 bytes 对象不为 b"exit",则向客户端发送问候响应信息 b"Hello %s!\n",其中 %s 是客户端发来的 bytes 对象。 Line 16:关闭套接字,不再向客户端发送数据。 Line 19:创建 socket 对象,第一个参数为 socket.AF_INET,代表采用 IPv4 协议用于网络通信,第二个参数为 socket.SOCK_STREAM,代表采用 TCP 协议用于面向连接的网络通信。 Line 20:向 socket 对象绑定服务器主机地址 ( 127.0.0.1 , 6000),即本地主机的 TCP 6000 端口。 Line 21:开启 socket 对象的监听功能,等待客户端的连接请求。 Line 24:进入监听客户端连接请求的循环阶段。 Line 25:接收客户端的连接请求,并获得与客户端交互数据的套接字对象 conn 与客户端的 IP 地址与端口号 addr,其中 addr 为二元组 (host, port)。 Line 26:利用多线程技术,为每个请求连接的 TCP 客户端创建一个新线程,实现了一台服务器同时与多台客户端进行通信的功能。 Line 27:开启新线程的活动。

0x04 TCP 客户端

#!/usr/bin/env python3 # -*- coding: utf-8 -*- #公众号:python学习开发 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s. connect (( "127.0.0.1" , 6000)) print(s.recv(1024).decode()) data = "client" while True : if data: print(s.recv(1024).decode()) data = input( "Please input your name: " ) if not data: continue s.send(data.encode()) print(s.recv(1024).decode()) if data == "exit"

猜你喜欢