在我們正常的使用socket模組來寫乙個server的程式就會顯得比較的複雜通常一般流程為
1.生成socket例項物件
2.繫結位址
3.開始監聽
4.接收資料
一般demo為
#伺服器import
socket
server = socket.socket() #
宣告socket型別,同時生成socket連線物件
server.bind(('
localhost
', 6969)) #
繫結要監聽的埠此時繫結的是本地
server.listen() #
監聽 括號裡面的就是最大允許鏈結
print('
等待**打進來')
coon, addr = server.accept() #
等待 (此時上面加乙個while 就可以多個**打進來並且進行通話)
#coon 就是客戶端連過來而在伺服器端為其生成的乙個連線例項
#addr 就是位址
print('
**打進來了')
print(coon, addr) #
將coon 與addr 顯示出來
while true: #
此時就可以一直不停的傳送資料了, 此時的效果就是乙個**可以無阻礙的通話
#如果此時沒有true的話就只能接收一次了
data = coon.recv(1024) #
接收資料
print('
recv:
', data.decode()) #
此時注意我們需要吧接收的資料解碼,因為發過來的是byte型別
coon.send(data.upper()) #
將資料裡面的字母轉化為大寫傳送
server.close()
這就是乙個單個接入,多次接收的server
如果想用多個接入多個接收的話我們只需要在coon上加乙個while即可 ,對與server來說乙個coon就是喲個接入點
那麼我們的socketserver又是方便在何處呢
對於socketserver來說我們只需要修改頭節點就可以了
我們需要新建立乙個類在類裡面修改 socketserver . baserequesthandler即可
在這個類中hand結束即代表 當前連線斷開
importsocketserver
class
my_tcphandler(socketserver.baserequesthandler):
defhandle(self):
while
true:
try:
self.data = self.request.recv(1024)
print("
{} wrote:
".format(self.client_address[0]))
(self.data)
self.request.send(self.data.upper())
#伺服器端到此結束
except
connectionreseterror as e:
(e)
break
host, post = "
localhost
", 9999server =socketserver.threadingtcpserver((host, post), my_tcphandler)
#併發 tcpserver改成 threadingtcpserver 在linux是建議使用forking來開多執行緒
server.serve_forever()
當
server =socketserver.threadingtcpserver((host, post), my_tcphandler) 時就是開了多執行緒可以多個接入,多個實時接收與傳送這樣來看我們的的伺服器端的程式是不是便捷了呢?
socket程式設計之單程序socket server
套接字是一種程序間的通訊的方法,不同於以往介紹的程序間通訊方法的是,它並不侷限於同一臺計算機的資源,例如檔案系統空間,共享記憶體或者訊息佇列。套接字可以認為是對管道概念的擴充套件 一台機器上的程序可以使用套接字與另一台機器上的程序通訊。因此客戶與伺服器可以分散在網路中。同一臺機器上的程序間也可以用套...
用select模組實現的socket server
之前筆記裡面記錄的比較亂,最後我寫了乙個類,試著封裝成乙個模組的樣子。使用的時候通過繼承生成乙個子類,然後呼叫run執行。你應該需要重構其中的部分方法,另外可能還需要在子類中建立新的方法。至少需要重構onrecv方法,接收到資料後的處理。另外要發資料,呼叫send data介面,把conn連線和by...
python之異常處理 Python之異常處理
異常物件 請大家執行如下 a 100 0 print a 就會發現直譯器顯示如下的錯誤提示 traceback most recent call last file x.py line 1,in a 100 0 zerodivisionerror division by zero 大家要學會看直譯器...