插座 - “STR”对象不能被解释为一个整数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插座 - “STR”对象不能被解释为一个整数相关的知识,希望对你有一定的参考价值。

下午好,我开始在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
答案

有一些错误,但主要是没有必要使用sendtorecvfrom上连接的插座。下面的代码写入到运行客户端和服务器在同一台计算机上:

server.朋友

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()

client.朋友

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()

注意:在TCP套接字recv(1024)是一个没有消息边界字节流,所以也不能保证你会收到一条消息的所有字节,而无需实施附加议定书。例如,在发送消息的长度的消息之前,或对于这样的面向字符串的消息,读,直到接收到新行字符。对于短字符串这样,你可能永远不会看到一个问题,或者只看到了问题,当网络非常繁忙或不可靠的。

另一答案

您正在使用不正确类型的参数调用recvfrom。该socket.recvfrom方法接受缓冲区大小作为第一个参数,其指定字节接收的最大数目。你给它一个字符串,在datos解码字节。

如果你确信datos包含字符串形式的整数,你可以通过简单地调用它转换为整数:cliente.recvfrom(int(datos.decode('utf-8')))

以上是关于插座 - “STR”对象不能被解释为一个整数的主要内容,如果未能解决你的问题,请参考以下文章

PYTHON,Midpoint方法,TypeError:'float'对象不能解释为整数

使用范围时“TypeError:'float'对象不能解释为整数”是啥意思?

TypeError:“列表”对象不能解释为整数

python numpy错误“TypeError:'numpy.float64'对象不能解释为整数”

将Python3 List(带str参数)转换为Bytes。

python-2.7 | SimpleCV - TypeError:'float'对象不能被解释为索引