1,socket 通訊
#importsocket ## 客戶端 client = socket.socket() client.connect(('127.0.0.1',8080)) whiletrue:#服務端:
import
socket
server =socket.socket()
server.bind((
'127.0.0.1,8080))
server.listen(5)
conn, addr =server.accept()
data = conn.recv(1024)
(data)
conn.send(
"hello")
conn.close()
server.close()
2, 連線迴圈+ 通訊迴圈
importsocket
"""服務端
固定的ip和port
24小時不間斷提供服務
"""server = socket.socket() #
生成乙個物件
server.bind(('
127.0.0.1
',8080)) #
繫結ip和port
server.listen(5) #
半連線池
while
true:
conn, addr = server.accept() #
等到別人來 conn就類似於是雙向通道
print(addr) #
('127.0.0.1', 51323) 客戶端的位址
while
true:
try:
data = conn.recv(1024)
print(data) #
b'' 針對mac與linux 客戶端異常退出之後 服務端不會報錯 只會一直收b''
if len(data) == 0:break
conn.send(data.upper())
except
connectionreseterror as e:
(e)
break
conn.close()
### 客戶端
import
socket
client =socket.socket()
client.connect((
'127.0.0.1
',8080))
while
true:
msg = input('
>>>:
').encode('
utf-8')
if len(msg) == 0:continue
client.send(msg)
data = client.recv(1024)
print(data)
tcp 粘包問題
importsocket
server =socket.socket()
server.bind((
'127.0.0.1
', 8080))
server.listen(5)
conn, addr =server.accept()
data = conn.recv(5)
(data)
data = conn.recv(4)
(data)
data = conn.recv(4)
(data)
客戶端import
socket
client =socket.socket()
client.connnet((
'127.0.0.1
', 8080))
client.send(b
'hello')
client.send(b
'hello')
client.send(b
'hello
')
4,解決粘包問題
###服務端
import
socket
import
subprocess
import
struct
import
json
server =socket.socket()
server.bind((
'127.0.0.1
',8080))
server.listen(5)
while
true:
conn, addr =server.accept()
while
true:
try:
cmd = conn.recv(1024)
if len(cmd) == 0:break
cmd = cmd.decode('
utf-8')
obj = subprocess.popen(cmd,shell=true,stdout=subprocess.pipe,stderr=subprocess.pipe)
res = obj.stdout.read() +obj.stderr.read()
d =
json_d =json.dumps(d)
#1.先製作乙個字典的報頭
header = struct.pack('i'
,len(json_d))
#2.傳送字典報頭
conn.send(header)
#3.傳送字典
conn.send(json_d.encode('
utf-8'))
#4.再發真實資料
conn.send(res)
#conn.send(obj.stdout.read())
#conn.send(obj.stderr.read())
except
connectionreseterror:
break
conn.close()
### 客戶端
import
socket
import
struct
import
json
client =socket.socket()
client.connect((
'127.0.0.1
',8080))
while
true:
msg = input('
>>>:
').encode('
utf-8')
if len(msg) == 0:continue
client.send(msg)
#1.先接受字典報頭
header_dict = client.recv(4)
#2.解析報頭 獲取字典的長度
dict_size = struct.unpack('
i',header_dict)[0] #
解包的時候一定要加上索引0
#3.接收字典資料
dict_bytes =client.recv(dict_size)
dict_json = json.loads(dict_bytes.decode('
utf-8'))
#4.從字典中獲取資訊
(dict_json)
recv_size =0
real_data = b''
while recv_size < dict_json.get('
file_size
'): #
real_size = 102400
data = client.recv(1024)
real_data +=data
recv_size +=len(data)
print(real_data.decode('
gbk'
))"""
1.如何將對方傳送的資料收乾淨
"""
網路程式設計之socket
套接字 socket 是乙個抽象層,應用程式可以通過它傳送或接收資料,可對其進行像對檔案一樣的開啟 讀寫和關閉等操作。套接字允許應用程式將i o插入到網路中,並與網路中的其他應用程式進行通訊。網路套接字是ip位址與埠的組合。套接字起源於 20 世紀 70 年代加利福尼亞大學伯克利分校版本的 unix...
網路程式設計之socket
1 是什麼?socket又稱套接字,是能夠實現程序間通訊的乙個 東西 2 為什麼?socket是對tcp ip協議的乙個封裝,相當於軟體設計模式中的外觀者模式 socket作為按鈕,按鈕內部連線著tcp ip的若干個對應的協議,也其實可以簡單理解為socket內部封裝著與tcp ip參考模型中各層進...
網路程式設計之Socket程式設計
對 tcp ip udp socket 程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission co...