下午好,我从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
答案 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()
是没有消息边界的字节流,因此不能保证您无需实现其他协议就可以接收消息的所有字节。例如,在消息之前发送消息的长度,或者对于像这样的面向字符串的消息,读取直到接收到新的换行符。对于像这样的短字符串,您可能永远不会看到问题,或者只会在网络非常繁忙或不可靠时看到问题。