---------------------不定时的更新开始了,且更且珍惜------------------------
我要每次都写一遍:前面的还没补完,以此催促不定时更新的我
-----------------
嗯,今天没带耳机,没边听歌边更博,没灵感改歌词
------------------
socket(套接字)编程
基于socket实现客户端与服务端编程:
想象成一个打电话的过程,要想打电话我们必须要先有手机,所以要先去买手机,然后插手机卡,开机等一系列步骤
服务端必备的三要素:
1.要有固定的ip和port
2.24小时不间断提供服务
3.能承受高并发(并发:看上去像同时进行)
服务端:
客户端:
注:
服务端:
bind:里面是一个元组,因为bind里面只需要一个参数,但需要传入ip和端口两个值,所以以元组的形式传入
元组内有两个元素:
‘127.0.0.1’:本机回环地址,找的就是自己的地址,且只能本机访问
第二个元素:端口号(通常为8000以后的)
listen:半连接池,允许的最大请求个数为5,即可以最多有5个客户端等待连接
recv(1024):只接收1024个bytes
send(b‘’):二进制传输
客户端:
connect():与服务端中bind的参数一样是个元组,且参数与服务端中的一样
粘包问题
产生粘包问题的原因:因为TCP协议是流式协议,会将数据量比较小的,并且时间间隔比较短的数据一次性打包发送给接收端
解决方法:导入struct模块,该模块可以把一个类型,如数字,字典等,转成固定长度的bytes
但当传入的数据大于struct模块中字节最大的模式时,依然会出现问题,这时候就需要将数据存入某个容器中,我们便可以直接传入容器,这样就可以解决这个问题了
解决粘包问题最终版:(以上传大文件为例)
服务端:
客户端:
最终版解决粘包问题的步骤
服务端:
1.先发报头
2.再发字典
3.再发你的真实数据
客户端:
1.先接收4个长度的报头
2.解包拿到字典数据长度
3.接收字典(反序列化>>>>获取字典里面所有信息)
4.接收真实数据
以下内容我要谴责王xx,利xx,两个人大半夜不睡觉,发美食????你们的良心不会痛吗??
只因为在图群中多看了你一眼,口水没忍住,肚子也跟着叫
为了写篇博客我容易吗???大半夜的,还要饱受你们的摧残,18岁的我承受了整个年纪不该有的善良........
勤勤恳恳更博的我,会被美食诱惑???
章鱼小丸子上校鸡块烤面筋麻辣鸭脖酸辣粉鳕鱼盖浇饭手抓饼瘦肉丸布丁巧克力奶茶寿司肉夹馍炒肝麦乐鸡烤鸡翅泡菜软心布丁乳酪烤肉火锅红烧排骨鸭脖土豆烧牛肉鱼丸炒拉条子大白兔奶糖驴肉火烧鸡米花酸菜鱼皮蛋瘦肉粥冰糖葫芦糖炒栗子豌豆黄烤红薯炸鸡
我来了...........
希望你们能感受到我的绝望..............
原文地址:https://www.cnblogs.com/yangyinyin/p/10817245.html