socket实现简单TCP循环通信(Python)
⼀、socket通信过程
TCP服务器端创建套接字 --> 绑定IP地址和端⼝ --> 监听客户端连接请求 --> 接收客户端连接(建⽴客户端连接) --> 阻塞直到有客户端连接 --> 处理请求(通信循环) --> 关闭连接 --> 关闭套接字
TCP客户端创建套接字 --> 连接服务端IP以及端⼝ --> 处理请求(通信循环) --> 关闭套接字
⼆、套接字函数
1.服务端套接字函数
s.bind(address)
将套接字绑定到地址,在AF_INET下,以元组(host,port)的形式表⽰地址。
s.listen(backlog)
开始监听TCP传⼊连接。backlog指定在拒绝连接之前,操作系统可以挂起的最⼤连接数量。该值⾄少为1,⼤部分应⽤程序设为5就可以了。
s.accept()
接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以⽤来接收和发送数据。address是连接客户端的地址。
2.客户端套接字函数
连接到address处的套接字。⼀般address的格式为元组(hostname,port),如果连接出错,返回错误。
3.公共套接字函数
接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最⼤数据量。flag提供有关消息的其他信息,通常可以忽略。
s.send(string[,flag])
发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能⼩于string的字节⼤⼩。
s.close()
关闭套接字。
三、代码实现(版本⼀)
实现效果:客户端单⽅⾯发送消息,服务端显⽰客户端发送的消息
server. py
import socket
# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定ip地址与端⼝号
sock.bind(('127.0.0.1', 8080))
# 建⽴监听,最⼤连接数为5个
sock.listen(5)
# 接收客户端的连接
conn, client_addr = sock.accept()
# 通讯循环
while True:
# 接收消息
msg = v(1024)  # 最⼤接收字节数为1024
if not msg:
continue
print('client is sending: ' + msg.decode('utf-8'))
# 断开连接
conn.close()
# 关闭套接字
sock.close()
client. py
import socket
# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务端
# 建⽴通讯循环
while True:
msg = input('Enter your message: ')
if msg == 'quit':
print('communication ended')
break
sock.de('utf-8'))  # Mac操作系统使⽤utf-8编码⽅式# 断开连接
sock.close()
先运⾏server,再运⾏client
运⾏效果:(p1 client,p2 server)
四、代码实现(版本⼆)
服务端客户端互发消息
server
import socket
# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定ip地址与端⼝号
sock.bind(('127.0.0.1', 8081))
# 建⽴监听,最⼤连接数为5个
sock.listen(5)
# 接收客户端的连接
conn, client_addr = sock.accept()
socket通信报文格式# 通讯循环
while True:
# 接收消息
msg = v(1024)  # 最⼤接收字节数为1024
if not msg:
continue
print('client is sending: ' + msg.decode('utf-8'))
reply = input('reply: ')
conn.de('utf-8'))
# 断开连接
conn.close()
# 关闭套接字
sock.close()
client
import socket
# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务端
# 建⽴通讯循环
while True:
msg = input('Enter your message: ')
if msg == 'quit':
print('communication ended')
break
sock.de('utf-8'))  # Mac操作系统使⽤utf-8编码⽅式    reply = v(1024)
print('server is sending: ' + reply.decode('utf-8'))
# 断开连接
sock.close()
先运⾏server,再运⾏client
运⾏效果:(p1 client,p2 server)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。