我正在客户端读取一个值,并希望将其发送到服务器端,以便检查它是否为素数.我收到错误,因为服务器正在期待一个字符串
服务器端
import socket
tcpsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsocket.bind( ("0.0.0.0", 8000) )
tcpsocket.listen(2)
(client, (ip,port) ) = tcpsocket.accept()
print "received connection from %s" %ip
print " and port number %d" %port
client.send("Python is fun!")
Run Code Online (Sandbox Code Playgroud)
客户端
import sys
import socket
tcpsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
num = int(raw_input("Enter number: "))
tcpsocket.connect( ('192.168.233.132', 8000) )
tcpsocket.send(num)
Run Code Online (Sandbox Code Playgroud)
错误必须是字符串或错误,而不是int.
我该如何解决这个问题?
Ser*_*sta 10
切勿在没有定义如何解释接收字节的上层协议的情况下在流上发送原始数据.
您当然可以以二进制或字符串格式发送整数
在字符串格式中,您应该定义字符串标记的结尾,通常是空格或换行符
val = str(num) + sep # sep = ' ' or sep = `\n`
tcpsocket.send(val)
Run Code Online (Sandbox Code Playgroud)
和客户方:
buf = ''
while sep not in buf:
buf += client.recv(8)
num = int(buf)
Run Code Online (Sandbox Code Playgroud)在二进制格式中,您应该定义一个精确的编码,struct模块可以提供帮助
val = pack('!i', num)
tcpsocket.send(val)
Run Code Online (Sandbox Code Playgroud)
和客户方:
buf = ''
while len(buf) < 4:
buf += client.recv(8)
num = struct.unpack('!i', buf[:4])[0]
Run Code Online (Sandbox Code Playgroud)这两种方法允许您甚至跨不同的体系结构实现数据交换
| 归档时间: |
|
| 查看次数: |
24471 次 |
| 最近记录: |