使用socket类实现tcp通信:
socket概念:
socket是应用层与TCP/IP协议族通信的中间软件抽象层,他是一组接口。
server端(服务端):
# import socket
from socket import *
# 服务端IP和端口号
ip_port = ('127.0.0.1', 8001)
# 最大连接数
back_log = 5
buf_size = 1024
phone = socket(AF_INET, SOCK_STREAM) # 创建基于tcp的socket对象
phone.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) # 有时候重启服务器会出现问题,加上这一句就行。
phone.bind(ip_port) # 绑定连接(即IP和端口号)
phone.listen(back_log) # 半连接池 监听连接
while True: # 外层连接循环
print('服务端启动!')
conn, addr = phone.accept() # 等待建立连接(阻塞到此)
print('双向连接',conn)
print('客户端的IP地址与端口号', addr)
while True: # 内层收发循环
try:
msg = conn.recv(buf_size) # 接收1024字节的消息
if not msg:
raise Exception
print('服务端接收的消息', msg.decode('utf-8'))
conn.send(msg.upper()) # 发消息
except Exception:
break
conn.close() # 结束电话连接
# phone.close() # 关机
client客户端:
# import socket
from socket import *
ip_port = ('127.0.0.1', 8001)
back_log = 5
buf_size = 1024
cphone = socket(AF_INET, SOCK_STREAM) # 创建socket对象
cphone.connect(ip_port) # 开始连接
while True:
msg = input('>>>')
if not msg:
continue
if msg == "exit":
break
cphone.send(msg.encode('utf-8')) # 以字节形式发送 bytes('hello', encoding='utf-8')
data = cphone.recv(buf_size) # 接收1024字节的消息
print('客户端接收的消息', data.decode('utf-8'))
cphone.close()