Python socket套字节
Posted yangzhizong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python socket套字节相关的知识,希望对你有一定的参考价值。
套接字socket标准:
位于:应用层--(socket抽象层)--传输层 之间
#Servre import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #第一步:初始化socket phone.bind((‘127.0.0.1‘,8080)) #第二步:绑定端口 phone.listen(5) #第三步:监听端口 conn, client_add = phone.accept() #第四步:接收客户端的connect连接请求 while True: #数据循环 try: data=conn.recv(1024) #第五步:接收客户端传来的数据信息 if len(data) == 0:break conn.send(data.upper()) #第六步:给客户端回复信息 print(data) except ConnectionResetError: break #传输数据关闭 conn.close() #第七步:传输数据关闭 #连接关闭 # phone.close() #第八步:连接关闭 #为了用户端和服务端能够互相交互延长时间: #将发送和接收数据写入到while里面(即建立一个通信循环)
#Client import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.connect((‘127.0.0.1‘,8080)) while True: msg=input(‘输入发送的内容:‘) if len(msg) == 0:continue phone.send(msg.encode(‘utf-8‘)) #只能传二进制bytes,所以要编码 data=phone.recv(1024) print(data) phone.close()
连接循环+通信循环搭配使用:
#servre
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #第一步:初始化socket
# phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 重用端口,为了在断开时系统端口还没有及时释放可能会报错
phone.bind((‘127.0.0.1‘,8080)) #第二步:绑定端口
phone.listen(5) #第三步:监听端口
while True: #连接循环
conn, client_add = phone.accept() #第四步:接收客户端的connect连接请求
while True: #数据循环
try:
data=conn.recv(1024) #第五步:接收客户端传来的数据信息
if len(data) == 0:break
conn.send(data.upper()) #第六步:给客户端回复信息
print(data)
except ConnectionResetError:
break
#传输数据关闭
conn.close() #第七步:传输数据关闭
#连接关闭
# phone.close() #第八步:连接关闭
# 为了和多个用户都能进行交互:
# 在服务端通信循环的accept()接收信息上面加入了一个循环,这样可以循环与多个客户端建立连接
‘‘‘
2
个错误情况的结局办法:
1)客户端直接关闭:
服务端处于recv()接收状态,由于是客户端直接断开,所以会报连接错误
解决办法就是加了
Try except ConnectionResetError
2)客户端输入的是回车:
服务器在accept状态,而没有收到客户端的任何信息,所以会继续等
if len(msg) == 0: continue
‘‘‘
----------------------------------------------------------------------------------------
#Client(没有变化)
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect((‘127.0.0.1‘,8080))
while True:
msg=input(‘输入发送的内容:‘)
if len(msg) == 0:continue
phone.send(msg.encode(‘utf-8‘)) #只能传二进制bytes,所以要编码
data=phone.recv(1024)
print(data)
phone.close()
以上是关于Python socket套字节的主要内容,如果未能解决你的问题,请参考以下文章