socket-'str'对象不能解释为整数

时间:2019-02-03 18:35:32

标签: python-3.x sockets

下午好,我从python中的套接字工具开始,正在创建一个基本服务器。 但是,它引发了一个错误: 'str' object can not be interpreted as an integer

现在多次修改代码,但错误不断出现。 最后一个更改是client.sendto (msg.encode ('utf-8'))

这是我的代码:

服务器:

import socket

ip = "0.0.0.0"
puerto = 8081
dataConection = (ip,puerto)
conexionesMaximas = 10

socketServidor = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socketServidor.bind(dataConection)
socketServidor.listen(conexionesMaximas)

print("Esperando conexiones en: ",ip,puerto)
cliente,direccion = socketServidor.accept()
print("Conexion establecida con: ",direccion[0],direccion[1])

while True:
    datos = cliente.recv(1024)
    print(datos)
    modificado,severAdress = cliente.recvfrom(datos.decode('utf-8'))
    if modificado == "exit":
        cliente.send("exit")
    print("Recibido",data)
    cliente.sendall("---Recibido---")
print("Conexion cerrada")
socketServidor.close()

客户端:

import socket

ipServidor = "192.168.6.1"
puertoServidor = 8081

cliente = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
cliente.connect((ipServidor,puertoServidor))
print("conectado con: ",ipServidor,puertoServidor)

while True:
    msg = input(">: ")
    cliente.sendto(msg.encode("utf-8"),(ipServidor,puertoServidor))
    respuesta = cliente.recv(4096)
    print(respuesta)
    if respuesta == "exit":
        break;

print("----conexion cerrada----")
cliente.close()

这是行错误:

Esperando conexiones en:  0.0.0.0 8081
Conexion establecida con:  192.168.8.3 49774
b'k'
Traceback (most recent call last):
  File "C:\Users\Angel\Desktop\server.py", line 19, in <module>
    modificado,severAdress = cliente.recvfrom(datos.decode('utf-8'))
TypeError: 'str' object cannot be interpreted as an integer

2 个答案:

答案 0 :(得分:0)

您正在使用错误类型的参数调用unset($_SESSION["products"]) recvfrom方法接受缓冲区大小作为其第一个参数,该参数指定要接收的最大字节数。您要给它一个字符串,即socket.recvfrom中的已解码字节。

如果确定datos包含字符串形式的整数,则可以通过简单地调用:datos将其转换为整数。

答案 1 :(得分:0)

存在许多错误,但主要是不需要在连接的套接字上使用qpal <- colorQuantile("RdYlBu", your_dataset$your_variable, n = 5) addLegend(pal = qpal, values = ~your_variable, opacity = 1) sendto。下面的代码被编写为在同一台计算机上运行客户端和服务器:

server.py

recvfrom

client.py

import socket

ip = ""
puerto = 8081
dataConection = (ip,puerto)
conexionesMaximas = 10

socketServidor = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socketServidor.bind(dataConection)
socketServidor.listen(conexionesMaximas)

print("Esperando conexiones en: ",ip,puerto)
cliente,direccion = socketServidor.accept()
print("Conexion establecida con: ",direccion[0],direccion[1])

while True:
    datos = cliente.recv(1024).decode()
    print(datos)
    if datos == "exit":
        cliente.sendall("exit".encode())
        break
    print("Recibido",datos)
    cliente.sendall("---Recibido---".encode())
print("Conexion cerrada")
socketServidor.close()

请注意,TCP套接字上的import socket ipServidor = "localhost" puertoServidor = 8081 cliente = socket.socket(socket.AF_INET,socket.SOCK_STREAM) cliente.connect((ipServidor,puertoServidor)) print("conectado con: ",ipServidor,puertoServidor) while True: msg = input(">: ") cliente.sendall(msg.encode()) respuesta = cliente.recv(4096).decode() print(respuesta) if respuesta == "exit": break print("----conexion cerrada----") cliente.close() 是没有消息边界的字节流,因此不能保证您无需实现其他协议就可以接收消息的所有字节。例如,在消息之前发送消息的长度,或者对于像这样的面向字符串的消息,读取直到接收到新的换行符。对于像这样的短字符串,您可能永远不会看到问题,或者只会在网络非常繁忙或不可靠时看到问题。