python 學習第二 十天(tcp粘包)

2021-08-22 19:32:07 字數 2117 閱讀 2785

#服務端

import socket

buffersize=10

sock=socket.socket(socket.af_inet,socket.sock_stream)

sock.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)#這一條配置為了防止出現[error] address already in use這個錯誤'''

第乙個引數位置是協議簇

socket.af_inet是ipv4

socket.af_inet6是ipv6

第二引數位置是傳輸型別

socket.sock_stream是流式型別,tcp

socket.sock_dgram是資料報型別,udp'''

sock.bind(('127.0.0.1',8000))

sock.listen(10)#可以同時建立十個連線

while true:

conn,addr=sock.accept()

print('已接受連線')

while true:

try:

lenth_data=conn.recv(4)

lenth=struct.unpack('i',lenth_data)[0]

n= lenth // buffersize

m= lenth % buffersize

l=[conn.recv(buffersize) for i in range(n)]

if l:

ifm: remain = conn.recv(m)

recv_mess = ''.encode().join(l) + remain

else:

recv_mess = ''.encode().join(l)

else:

recv_mess=conn.recv(m)

if recv_mess.decode('utf8'):

print(recv_mess.decode('utf8'))

lenth_backdata=struct.pack('i',len('訊息已收到'.encode('utf8')))

conn.send(lenth_backdata)

conn.send('訊息已收到'.encode('utf8'))

except exception:

break

conn.close()

#客戶端

import socket

import struct

buffersize=5

sock=socket.socket(socket.af_inet,socket.sock_stream)

sock.connect(('127.0.0.1',8000))#連線伺服器

while true:

data=input('>>')

if data=='':

continue

if data=='q':

break

sock.send(struct.pack('i',len(data.encode('utf8'))))# 傳送頭部

sock.send(data.encode()) #傳送資料

lenth_data = sock.recv(4)

lenth = struct.unpack('i', lenth_data)[0]#接收頭部,

#接收資料

n = lenth // buffersize

m = lenth % buffersize

l = [sock.recv(buffersize) for i in range(n)]

if l:

ifm: remain = sock.recv(m)

recv_mess = ''.encode().join(l) + remain

else:

recv_mess = ''.encode().join(l)

else:

recv_mess = sock.recv(m)

print(recv_mess.decode('utf8')

python學習第二十天

1.多繼承 繼承 x是一種y的時候.可以使用繼承關係.is a 乙個類同時繼承多個類 python,c 孫悟空是一種猴子,還是一種神仙 2.經典類的mro 通過數型結構的深度優先遍歷 一條道走到黑 從左往右 3.新式類的mro 重點,難點 c3演算法 先拆分再合併 第一項的頭和後面所有項的尾進行比較...

Linux C學習第二十天

棧和佇列 棧 後進先出 新增元素 壓棧 刪除元素 出棧 棧的實現 1.順序棧。2.鏈式棧 棧最頂端的元素叫棧頂元素。順序棧 標頭檔案 ifndef stack h define stack h define size 10 typedef enum bool typedef int data typ...

第二十天 繼承

繼承指的是新建類的方法 新建的類稱之為子類或者派生類 子類繼承的類叫做父類,也 稱之為基類或超類 子類可以繼承父類的屬性 特徵與技能 並且可以派生出自己的屬性 特徵與技能 繼承的目的是為了減少 冗餘 減少重複 抽象指的是抽取相似的部分,稱之為抽象.物件是特徵與技能的結合體.類是一系列物件相同的特徵與...