python 的 socket.recv 返回值的疑问

2016-05-26 09:03:12 +08:00
 xcc7624

socket 的API文档

python socket

socket.recv(bufsize[, flags])


Receive data from the socket. The return value is a string representing the data received. 
The maximum amount of data to be received at once is specified by bufsize. See the Unix manual page recv(2) for the meaning of the optional argument flags; it defaults to zero.

这里说 return value is a string representing 是什么意思?

如下的程序,客户端为什么 print data 打印出的是乱码,这个不是 ASCII 码表示的 510 吗? -------------------------------------客户端------------------------- `

Echo client program

import socket

HOST = '127.0.0.1' # The remote host PORT = 50007 # The same port as used by the server s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) s.sendall('\x05\x01\x00') data = s.recv(1024) s.close()

print data print 'Received', repr(data) ---------------------------------服务器端--------------------------------------

Echo server program

import socket

HOST = '' # Symbolic name meaning all available interfaces PORT = 50007 # Arbitrary non-privileged port s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) conn, addr = s.accept() print 'Connected by', addr while 1: data = conn.recv(1024) if not data: break conn.sendall(data) conn.close() `

6162 次点击
所在节点    Python
2 条回复
ms2008
2016-05-26 09:43:09 +08:00
当然乱码啊,你发的就是二进制流
Muninn
2016-05-26 15:01:03 +08:00
你在本地能把 print('\x05\x01\x00') 打出来再说,汗。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281311

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX