python unix socket_python-tcp socketserver与windows和unix客户端的区别

我觉得这是一个非常基本的问题,但我的谷歌付没有产生任何具体的点击率。我的问题与windows和unix tcp客户端之间的套接字通信差异有关。如果我提供下面非常基本的tcp服务器代码,并通过telnet或netcat(例如telnet remotehost 9997)通过bsd/macos/linux建立连接,那么我可以输入一行文本,然后输入一个新行(\r\n),服务器就会响应。

当我通过telnet应用程序(或putty使用telnet)从windows XP客户机建立连接时,我可以连接,但只能在服务返回响应之前键入一个字符。我意识到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..

所以我的问题是,如何让这个socket服务器与windows客户机一起工作?或者我在windows环境中做了什么改变,这将允许我传递一个字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值