网络编程

协议:双方通信的方式就是协议

广播和单播(MAC地址):

开始要广播,拿着自己的IP和MAC,使用交换机,发送广播,找到对
方的MAC地址

拿着对方的MAC地址,使用单播的方式返回到自己的地址

黏包现象:

往文件写一个内容的时候,比如比较大的视频,当两个对端没有定义好大小的时候,会产生黏包现象

解决两种:

一种:time.sleep(0.1)      #背后发生了什么

一种:

client:
import socket
import struct
import json
import os
import time

sk = socket.socket()
sk.connect(('127.0.0.1', 9003))

src = input('传入文件的地址:')

pathname = os.path.basename(src)
filesize = os.path.getsize(src)

dic = {'pathname': pathname, 'filesize': filesize}
ndic = json.dumps(dic)
ndic = ndic.encode('utf-8')
len_dic = len(ndic) #字典长度
# print(len_dic)
byte_dic = struct.pack('i', len_dic)
sk.send(byte_dic)
sk.send(ndic)
#E:\python课程\day29\视频\1.内容回顾和作业讲解.mp4
with open(src, 'rb') as f:
    while 1:
        data = f.read(1024)
        if data:
            sk.send(data)
        else:
            break
    # while filesize > 1024:
    #     content = f.read(1024)
    #     filesize -= 1024
    #     sk.send(content)
    # else:
    #     content = f.read()
    #     sk.send(content)
    #     time.sleep(1)
    #     sk.send(b'q')
sk.close()


server:

import socket
import struct
import json

sk = socket.socket()
sk.bind(('127.0.0.1', 9003))
sk.listen()

conn, addr = sk.accept()
msg = conn.recv(4)
msg = struct.unpack('i', msg)[0] #这是大小
#接这些数量大小的文件
str_dic = conn.recv(msg).decode('utf-8')
dic = json.loads(str_dic)
print(dic)

with open(dic['pathname'], 'wb') as f:

    while 1:
        content = conn.recv(1024)
        if content:
            f.write(content)
        else:
            break

    # while True:
    #     content = conn.recv(1024)
    #     if content == b'q':
    #         break
    #     print(content)
    #     f.write(content)
conn.close()
sk.close()



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值