python怎么使用socket通信传输数据
创始人
2024-12-26 18:41:53
0次

1.服务器端

功能:计算客户端传输过来的文件个数、文件总长度、字符串总次数、字符串总个数、数据总长度,并且总长度不大于max_len,否则服务器将断开联系

异常处理

import socket
server=socket.socket()
server.bind(("localhost",5555))
server.listen()
conn,address=server.accept()
 
file_number=0#文件个数
file_len=0#文件总字长
data_number=0#字符串个数
data_len=0#数据长度
recv_len=0#总字长
max_len=2000000
 
#文件处理方法
def file_deal(data,file_number):
    with open(str(file_number)+'.jpg','wb')as f:
        f.write(data)
    print("文件保存成功!")
 
 
while True:
    try:
        #传输数据超过max_len则断开数据传输
        if recv_len>max_len:
            print("客户端传输数据超过{}字节,服务器断开连接".format(max_len))
            print("本次一共传输{}字节的数据那,其中字符串为{}字节,传输{}次,文件为有{}字节,传输{}次".format(recv_len, data_len, data_number, file_len, file_number))
            #conn.send("你已经超出传输范围{},服务器断开连接".format(max_len))
            break
        recv_data=conn.recv(1000)
        #recv处理层!
        #服务器和客户端达成协议,客户端向服务器端发来的指令:
        # 发送文件为2,发送数据为1,结束发送为4,继续发送为3
        #send处理层:
        #回复1为收到,2为未收到!
        if recv_data.decode('utf-8')=='1':
            print("准备客户端发送过来的字符串!")
            data_recv=conn.recv(1000)
            print("收到从客户端发送过来的字符串:",data_recv.decode('utf-8'))
            data_number+=1#字符串总个数
            recv_len+=len(data_recv)#总字长
            data_len+=len(data_recv)#字符串总长
        elif recv_data.decode('utf-8')=='2':
            print("准备接受客户端发送过来的文件")
            data_recv=conn.recv(100000000)
            file_deal(data_recv,file_number)
            file_number+=1#文件个数
            recv_len += len(data_recv)#总字长
            file_len+=len(data_recv)#文件总字长
        elif recv_data.decode('utf-8')=='3':
            print("客户端重新发送数据")
            data_recv=conn.recv(10000)
            continue
        else:
            print("客户端已断开联系!我也断开联系吧")
            data_recv=conn.recv(10000)
            print("本次一共传输{}字节的数据那,其中字符串为{}字节,传输{}次,文件为有{}字节,传输{}次".format(recv_len, data_len, data_number, file__len, file_number))
            break
    except:
        print("客户端突然中断")
        break
server.close()

2.客户端

功能:向服务器端发送文件和字符串,并进行异常处理

import socket,os
 
def isfile(filename):
    result=os.path.exists(filename)
    return result
 
def readfile(filename):
    with open(filename,'rb')as f:
        data=f.read()
    return data
 
specialchar=['1','2','3','4']
client=socket.socket()
client.connect(('localhost',5555))
 
while True:
    try:
        #if client.recv(1000):
            #break
        data_send=input("请输入您想发送的数据类型!1为字符串2为文件4为结束发送3为继续发送:").strip()
        if data_send not in specialchar:
            continue
        client.send(data_send.encode('utf-8'))
        if data_send=='1':
            while True:
                data_send=input("请输入您想发送的字符串:").strip()
                if data_send not in specialchar:
                    client.send(data_send.encode('utf-8'))
                    break
                else:
                    continue
        elif data_send=='2':
            while True:
                data_filename=input("请您输入你想发送的文件名:").strip()
                if isfile(data_filename):
                    client.send(readfile(data_filename))
                    break
                else:
                    print("请重新输入文件!")
                    continue
        elif data_send=='3':
            client.send('3'.encode('utf-8'))
            continue
        elif data_send=='4':
            client.send('4'.encode('utf-8'))
            break
        else:
            print("输入错误!请重新输入!")
            continue
    except:
        print("服务器端突然中断!")
        break
 
client.close()

实现功能:实时传输数据(包括字符串、文件),客户端文件的保存等。

3.socket通信优点

客户端:

向服务器端发送文件和字符串,并进行异常处理

服务器端:

计算客户端传输过来的文件个数、文件总长度、字符串总次数、字符串总个数、数据总长度,并且总长度不大于max_len,否则服务器将断开联系、异常处理。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...