Skip to content

Instantly share code, notes, and snippets.

@Foair
Created July 2, 2017 13:32
Show Gist options
  • Select an option

  • Save Foair/169ef2f8842b3673e715419f8a4ba77e to your computer and use it in GitHub Desktop.

Select an option

Save Foair/169ef2f8842b3673e715419f8a4ba77e to your computer and use it in GitHub Desktop.
Python TCP 客户端、服务端程序
"""客户端程序"""
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()
"""服务端程序"""
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