基於socket通訊的內部演算法,當傳送的訊息為空的時候,接收端不會收到訊息,而傳送端向下執行到recv,兩端出於僵持狀態。
所以在傳送端需要有個判斷,如果傳送的為空,則重新輸入傳送內容。
socket是應用層與tcp/ip協議通訊的中間軟體抽象層,它是一組介面。
import socket
#買手機
phone=socket.socket()
#插入/繫結手機卡
phone.bind(('127.0.0.1',8080))
#開機phone.listen(5) #半連線池,限制的是請求數
#等待**連線
print('start....')
while true:
conn,client_addr=phone.accept()
print(conn)
print('已經有乙個連線建立成功',client_addr)
while true:
try:
print('服務端正在收資料...')
data=conn.recv(1024)
if len(data)==0:break
print('來自客戶端的資料',data)
conn.send(data.upper())
except connectionreseterror:
break
#掛掉**連線
conn.close()
#關機phone.close()
import socket
#買手機
phone=socket.socket()
#撥**
phone.connect(('127.0.0.1',8080))
#通訊:發\收訊息
while true:
msg=input('>>>').strip()
if len(msg)==0:continue
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data)
#關閉phone.close()
import socket
#買手機
phone=socket.socket()
#撥**
phone.connect(('127.0.0.1',8080))
#通訊:發\收訊息
while true:
msg=input('>>>').strip()
if len(msg)==0:continue
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data)
#關閉phone.close()
注意:必須先啟動服務端,開啟埠後才能再開啟客戶端。
在沒有併發通訊時,客戶端1和伺服器建立連線,埠被占用,客戶端2向伺服器傳送資訊時,伺服器收不到資訊。只有當客戶端1斷開後,客戶端2才能向伺服器傳送訊息。
基於TCP協議的套接字程式設計
socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。socket模板已經為我們封裝好了,我...
基於tcp協議的套接字
簡單版本 一 服務端 import socket 1 買手機 拿到套接字物件,用來鏈結建立鏈結 phone socket.socket socket.af inet,socket.sock stream tcp稱為流式協議sock stream,udp稱為資料報協議sock dgram print ...
基於tcp的套接字程式設計
伺服器端 1 author kelvin2 date 2019 1 28 22 10 3from socket import 4 server socket.socket af inet,sock stream 5 server.setsockopt sol socket,so reuseaddr,...