gpt4 book ai didi

python - 套接字模块,如何发送整数

转载 作者:太空狗 更新时间:2023-10-29 22:12:55 25 4
gpt4 key购买 nike

我正在客户端读取一个值,并想将其发送到服务器端,以便它可以检查它是否为质数。我收到一个错误,因为服务器需要一个字符串

服务器端

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!")

客户端

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)

错误:必须是 string 或 buffer,不是 int。

我该如何解决?

最佳答案

在没有定义说明如何解释接收到的字节的上层协议(protocol)的情况下,切勿在流上发送原始数据。

您当然可以发送二进制或字符串格式的整数

  • 在字符串格式中,您应该定义一个字符串结束标记,通常是一个空格或一个换行符

    val = str(num) + sep # sep = ' ' or sep = `\n`
    tcpsocket.send(val)

    和客户端:

    buf = ''
    while sep not in buf:
    buf += client.recv(8)
    num = int(buf)
  • 二进制格式,你应该定义一个精确的编码,struct模块可以帮助

    val = pack('!i', num)
    tcpsocket.send(val)

    和客户端:

    buf = ''
    while len(buf) < 4:
    buf += client.recv(8)
    num = struct.unpack('!i', buf[:4])[0]

这 2 种方法允许您甚至跨不同的架构可靠地交换数据

关于python - 套接字模块,如何发送整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33913308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com