Вот простой питон 3.x TCP сервер:Определение определенного количества байтов, отправляемых/полученных в сообщении. (Python)
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_, используйте 'len (s)' перед кодировкой '' для UTF-8. – abarnert