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套字节的主要内容,如果未能解决你的问题,请参考以下文章

套字节(socket)

用socket发送接收数据,但每次接收的数据字节长度都大于发送的25个字节?

python socket 编程

C++socket编程,数据转为网络字节序的问题htons

python发送字节数据

可以为 python 的 socket.recvfrom() 设置最小字节数吗?