Я чувствую, что это очень простой вопрос, но мой гугл-фу не дает каких-либо конкретных хитов.Моя проблема связана с разницей связи сокетов между Windows и Unix TCP клиентами.Если я приведу приведенный ниже базовый код tcp-сервера и установлю соединение через bsd / macos / linux через telnet или netcat (например, telnet remotehost 9997), я смогу ввести строку текста, за которой следует новая строка (\ r \ n), и сервер отвечает.
Когда я устанавливаю соединение из клиента Windows XP, через приложение telnet (или замазку через telnet), я могу подключиться, но могу только набратьодин символ до того, как сервис вернет ответ.Я понимаю, что сетевые стеки Windows и Unix обрабатывают сокеты по-разному, но странным является то, что из моего захвата пакета я не вижу, как Windows-клиент добавляет возврат каретки.
пример кода:
import SocketServer as socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
self.request.send("Welcome\r\n")
self.data = self.request.recv(1024).strip()
print("%s wrote:" % self.client_address[0])
print(self.data)
self.request.send(self.data.upper())
if __name__ == "__main__":
server = socketserver.TCPServer(('', 9997), MyTCPHandler)
server.serve_forever()
Вот захват пакета на стороне сервера при подключении из клиента Windows.0x62 (b) - это символ, который я набрал, во время моей попытки набрать: blah
0000 00 00 00 01 00 06 00 23 33 74 d5 3f 00 00 08 00 .......# 3t.?....
0010 45 00 00 35 77 86 40 00 3c 06 02 5a 0a 0e 14 29 E..5w.@. <..Z...)
0020 0a 03 9c a9 c6 0e 27 0d 20 ed 36 de 87 f2 30 a2 ......'. .6...0.
0030 80 18 ff ff 48 ee 00 00 01 01 08 0a 08 00 46 01 ....H... ......F.
0040 94 f6 26 6f 62 ..&ob
Сервер отвечает 0x42 (B)
0000 00 04 00 01 00 06 00 50 56 86 1a 4e 00 00 08 00 .......P V..N....
0010 45 00 00 35 16 fd 40 00 40 06 5e e3 0a 03 9c a9 E..5..@. @.^.....
0020 0a 0e 14 29 27 0d c6 0e 87 f2 30 a2 20 ed 36 df ...)'... ..0. .6.
0030 80 18 00 b5 c5 0a 00 00 01 01 08 0a 94 f6 29 a0 ........ ......).
0040 08 00 46 01 42 ..F.B
Вот дамп пакета изUnix-клиент (netcat remotehost 9997), я ввожу букву t (0x74), и мне необходимо принудительно нажать возврат каретки, который генерирует 0x0d0a.
0000 00 00 00 01 00 06 00 23 33 74 d5 3f 00 00 08 00 .......# 3t.?....
0010 45 00 00 37 ee d2 40 00 3c 06 8b 0b 0a 0e 14 29 E..7..@. <......)
0020 0a 03 9c a9 c6 10 27 0d 69 ac 8e d6 b8 7b 92 b4 ......'. i....{..
0030 80 18 ff ff c4 b1 00 00 01 01 08 0a 08 00 48 1d ........ ......H.
0040 94 f6 59 2b 74 0d 0a ..Y+t..
Так что мой вопрос, как я могу получить этосокет сервер для работы с windows клиентами?Или что я могу изменить в среде Windows, что позволит мне передать строку символов.