我使用TCP Client建立连接,显示“socket已连接”,但'data=conn.recv'是错误的

问题描述 投票:0回答:1

我试图在 TCP Client 和 W5500 之间建立连接。

这是我的代码。

socket.set_interface(eth)
server = socket.socket()  # Allocate socket for the server
server_ip = None  # IP address of server
server_port = 50007  # Port to listen on
server.bind((server_ip, server_port))  # Bind to IP and Port
server.listen()  # Begin listening for incoming clients

conn, addr = server.accept()  # Wait for a connection from a client.
print("socket connected")
while True:
eth.maintain_dhcp_lease()

    led.value = not led.value
    time.sleep(1)
    with conn:
        # data = conn.recv()
        # print(data)
        # conn.send(data)  # Echo message back to client
        while True:
            data = conn.recv(10)
            if data:
                print(data)
                conn.send(data)  # Echo message back to client
                break

我试图从 TCP 客户端应用程序建立连接。尽管我已经建立了连接,就像该图中的“套接字已连接”一样,但 data = conn.recv(10) 出现了问题。怎么解决呢?我的网络有问题吗?

conn.send() 就可以了。但我发现如果 conn.recv() 运行,会发生以下情况。

Wiznet5k SimpleServer Test (no DHCP)
Ethernet link is down…
Chip Version: w5500
MAC Address: ['0xde', '0xad', '0xbe', '0xef', '0xfe', '0xed']
My IP address is: 192.168.1.8
*** Get socket.
Reserved sockets: [False, False, False, False, False, False, False]
Allocated socket # 1.
* Listening on port=50007, ip=192.168.1.8
*** Opening socket 1
* Opening W5k Socket, protocol=33
*** Get socket.
Allocated socket # 0
Dest is (192.168.1.11, 46396), Next listen socknum is #0
*** Get socket.
Reserved sockets: [True, False, False, False, False, False, False]
Allocated socket # 2.
* Listening on port=50007, ip=192.168.1.8
*** Opening socket 2
* Opening W5k Socket, protocol=33
socket connected
socket_available called on socket 1, protocol 33
*** Disconnecting socket 1
*** Closing socket 1
  Waiting for socket to close…
  Socket has closed.
Traceback (most recent call last):
  File "<stdin>", line 78, in <module>
  File "adafruit_wiznet5k/adafruit_wiznet5k_socket.py", line 276, in wrapper
  File "adafruit_wiznet5k/adafruit_wiznet5k_socket.py", line 499, in recv
  File "adafruit_wiznet5k/adafruit_wiznet5k_socket.py", line 276, in wrapper
  File "adafruit_wiznet5k/adafruit_wiznet5k_socket.py", line 598, in recv_into
TypeError: unsupported types for __gt__: 'NoneType', 'int'

我根本没发信息,就这样自动断线了

python tcp
1个回答
0
投票

我已经解决了这个问题。 您需要在运行

conn.settimeout()
之前添加
conn.recv()

© www.soinside.com 2019 - 2024. All rights reserved.