socket套接字通訊和粘包問題

2022-07-24 09:12:08 字數 2087 閱讀 4829

什麼是socket?

socket是乙個模組,又稱套接字,用來封裝網際網路協議(應用層以下的層)。

為什麼要有socket?

socket可以實現 網際網路協議 應用層以下的層的工作

-提高開發效率

怎麼使用socket?

import socket

寫socket套接字:

#服務端

import

socket

#獲取手機

server =socket.socket()

#繫結ip位址,port埠

server.bind(('

127.0.0.1

',8500))

#半連線池

server.listen(5)#

最多5個人坐椅子,實際上==6

print('

server is running')

while

true:

#conn為通道 ,等待**的接入

conn,addr =server.accept()

print

(addr)

while

true:

try:

#接聽對方假話的內容

#data客戶端傳送過來的訊息

date = conn.recv(1024)

print(date.decode('

utf-8'))

if len(date) ==0:

break

if date.decode('

utf-8

') == 'q'

:

break

send_date = input("

服務端》:")

#服務端往客戶端傳送訊息

conn.send(send_date.encode('

utf-8'))

except

exception as e:

print

(e)

break

client.py

#客戶端

import

socket

#買手機

client =socket.socket()

#撥號 connect為連線

client.connect(('

127.0.0.1

',8500))#

客戶端的ip與port必須與服務端一致

print('

client is running')

while

true:

send_date = input("

客戶端》:")

#必須傳送bytes型別的資料

client.send(send_date.encode('

utf-8'))

#接受date的資料

date = client.recv(1024)

if date.decode('

utf-8

') == 'q'

:

break

if len(date) ==0:

break

print(date.decode('

utf-8'))

client.close()

1)問題:無法確認對方傳送過來資料的大小。

2)問題:在傳送資料間隔短並且資料量小的情況下,

會將所有資料一次性傳送

確認:確認對方資料的大小

-無論哪一端先傳送資料

-客戶端

1)先製作報頭,並傳送(struct)

2)傳送真實資料

-服務端:

1)接受報頭,並解包獲取 真實資料長度

2)根據真實資料長度 接受真實資料

recv(真實資料長度)

socket 套接字通訊

要通過internet進行通訊,至少需要一對套接字,其中乙個執行在客戶端,稱之為clientsocket,另乙個執行於伺服器端面,稱為serversocket。根據連線啟動的方式以及本地要連線的目標,套接字之間的連線過程可以分為三個步驟 伺服器監聽 客戶端請求 連線確認。伺服器監聽是指服務端套接字並...

利用Socket套接字通訊

我只寫了服務端程式。服務端會了,客服端就好寫了。我的伺服器功能是個小計算器。server.c socket 實現通訊。客服端輸入表示式經過伺服器計算出結果發給客服端 伺服器端建立任務 監聽客戶端,收到資料,發給服務端的子程序讓子程式,子程式呼叫execlp bc命令計算出結果給父程序,父程序傳給伺服...

java通訊 套接字Socket

無論用什麼語言開發,socket都是繞不過去的乙個環節,若以簡單論,除了檔案操作,程序間通過socket通訊還是比較方便的。對於主機a和b,若a主機想向b主機傳送資訊,那麼基本步驟如下 1.首先確保b主機上socket服務端開啟,服務端會監聽本機上的乙個埠,例如8080。socket服務端會以阻塞形...