插座 - “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
有一些错误,但主要是没有必要使用sendto
和recvfrom
上连接的插座。下面的代码写入到运行客户端和服务器在同一台计算机上:
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'对象不能解释为整数”是啥意思?
python numpy错误“TypeError:'numpy.float64'对象不能解释为整数”