下面是一個簡單的Python 3.x的TCP服務器:查找消息中發送/接收的特定字節數。 (蟒蛇)
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
print(str(self.client_address[0]) + " wrote: " + str(self.data.decode()))
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
和客戶端:
import socket
import sys
HOST, PORT = "localhost", 9999
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
while(True):
data = input("Msg: ")
if data == "exit()":
print("Exiting...")
sock.close()
exit();
sock.sendall(bytes(data, "utf-8"))
#numBytes = ....?
#print("Sent: " + str(numBytes) + " bytes\n")
我無法弄清楚如何查看字節的確切數字,我在發一個消息。我可以使用len(data),但是它沒有考慮空終止符,並且這樣......是否也發送了空終止符,或者它是不相關的?我試圖研究發送/接收消息的確切字節數,但是我找不到任何python特定的文檔,只能看到使用len()的人的例子,我認爲這不是確切的...
有沒有想法?
嗯,所以在python的角度來看,len(buf),沒有添加空終止符,它是一個字節大小的準確度量? –
@Noobacode:是的,如果你發送一個名爲'buf'的字節而不添加空終止符,'len(buf)'是緩衝區的長度。如果出於某種原因明確添加空終止符,那麼len(buf + b'\ 0')是具有空終止符的緩存長度。 – abarnert
@Noobacode:請記住,這是以字節爲單位的長度,而不是字符的長度。如果你想要_that_,在將's'編碼爲UTF-8之前使用'len(s)'。 – abarnert