Created
July 2, 2017 13:32
-
-
Save Foair/169ef2f8842b3673e715419f8a4ba77e to your computer and use it in GitHub Desktop.
Python TCP 客户端、服务端程序
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """客户端程序""" | |
| import socket | |
| # 创建客户端的套接字(socket.AF_INET 指定使用 IPv4 协议,socket.SOCK_STREAM 指定使用流式 TCP 连接) | |
| client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
| # 建立连接 | |
| client.connect(('127.0.0.1', 9999)) | |
| # 接收欢迎信息 | |
| print(client.recv(1024).decode('utf-8')) | |
| # 发送数据 | |
| for data in [b'Mario', b'Tracy', b'James']: | |
| client.send(data) | |
| print(client.recv(1024).decode('utf-8')) | |
| client.send(b'exit') | |
| client.close() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """服务端程序""" | |
| import socket | |
| import time | |
| import threading | |
| def tcplick(sock, addr): | |
| print('接受连接:%s:%s' % addr) | |
| sock.send('你好!'.encode('utf-8')) | |
| while True: | |
| data = sock.recv(1024) | |
| time.sleep(1) | |
| if not data or data.decode('utf-8') == 'exit': | |
| break | |
| sock.send(('你好,%s。' % data.decode('utf-8')).encode('utf-8')) | |
| sock.close() | |
| print('关闭连接:%s:%s' % addr) | |
| # 创建服务端的套接字(socket.AF_INET 指定使用 IPv4 协议,socket.SOCK_STREAM 指定使用流式 TCP 连接) | |
| server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
| # 为套接字绑定 IP 地址和端口号 | |
| server.bind(('127.0.0.1', 9999)) | |
| # 监听端口,等待连接的最大数量为 5 | |
| server.listen(5) | |
| print('等待客户端连接……') | |
| while True: | |
| # accept() 会等待并返回一个客户端的连接 | |
| # 所谓的停等,收到连接请求后执行下一条语句 | |
| sock, addr = server.accept() | |
| # 接受连接请求后,创建新线程处理 TCP 连接 | |
| new_thread = threading.Thread(target=tcplick, args=(sock, addr)) | |
| # 启动线程 | |
| new_thread.start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment