python socket伺服器端一直接收空字串

2021-10-03 21:10:45 字數 1992 閱讀 8635

我最開始是這樣構想的,如果客戶端傳送88的訊息,那麼直接關閉伺服器端的訊息,但是陰差陽錯,c#客戶端的**寫錯了,就看到了這個現象,那就是如果客戶端socket**關閉的話,伺服器端會一直接收到空訊息

最初的**是這樣的:

python服務端

# coding=utf-8

# 使用utf-8編碼

# coding=utf-8

# 使用utf-8編碼

import socket

import select

# the max player number

playernumber =

10# host and port

host = socket.gethostname(

)port =

12345

# create socket named mysocket,based on tcp

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

# bind

mysocket.bind(

("127.0.0.1"

,port)

)# listen

mysocket.listen(playernumber)

# 不能設為空,因為select會報錯

socket_list =

[mysocket]

while

true

:# select 監聽請求物件,如果沒有收到請求,則阻塞,此處相當於監聽accept事件

# myevent為響應事件物件,這裡返回的就是socket,若響應的是accept事件,則返回本身的伺服器socket,若響應recv,則返回客戶端socket

myevent,wret,xret = select.select(socket_list,

,)print myevent

for i in myevent:

if i is mysocket:

conn,addr = i.accept(

)else

:# 接收到訊息,輸出

try:

receivedata = i.recv(

1024

)print

(receivedata)

# 銘記,客戶端正常關閉的話

# 這裡直接判斷接收的是否為空字串即可

if receivedata ==

"88"

: socket_list.remove(i)

i.close(

)continue

# 客戶端關閉了,從sockelist中刪除

except

: socket_list.remove(i)

i.close(

)continue

mysocket.close(

)

c#客戶端注意看一裡面if的判斷的注釋

using system;

using system.collections.generic;

using system.linq;

using system.net;

using system.net.sockets;

using system.text;

using system.threading.tasks;

namespace tcp客戶端

mysocket.

send

(encoding.utf8.

getbytes

(senddata));

} mysocket.

close()

;}}}

python socket伺服器與裝置通訊

首先建立兩份 乙份執行於伺服器,乙份執行於裝置端 參考 裝置端from socket import host 149.28.159.155 指定客戶端訪問host port 21567 bufsiz 1024 addr host,port tcpclisock socket af inet,sock...

python socket 實現伺服器 客戶端通訊

伺服器 usr env bin python coding utf 8 import socket server def server sock socket.socket socket.af inet,socket.sock stream sock.bind localhost 8000 sock...

Python socket實現伺服器端與客戶端連線

伺服器端與客戶端每個5秒鐘通訊一次,具體實現如下 伺服器端 usr bin python coding utf 8 檔名 server.py import socket 匯入 socket 模組 import time s socket.socket 建立 socket 物件 host socket...