【问题标题】:TCP sockets python timeout public IP addressTCP套接字python超时公共IP地址
【发布时间】:2015-03-29 08:53:25
【问题描述】:

我正在尝试使用 TCP 套接字在服务器和客户端之间进行通信。

服务器代码:

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the port
server_address = ('my-server-ipadress', 1999)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)
sock.listen(1)
 try:
        print >>sys.stderr, 'connection from', client_address

        # Receive the data in small chunks and retransmit it
        while True:
            data = connection.recv(16)
            print >>sys.stderr, 'received "%s"' % data
            if data:
                print >>sys.stderr, 'sending data back to the client'
                connection.sendall(data)
            else:
                print >>sys.stderr, 'no more data from', client_address
                break

    finally:
        # Clean up the connection
        connection.close()

客户端代码:

from socket import *

clientsocket = socket(AF_INET,SOCK_STREAM)

clientsocket.connect(("my-server-ip-address",1999))

recv = clientsocket.recv(1024)

print(recv)

在本地连接上运行良好。我面临的问题是当我在笔记本电脑上运行客户端代码(使用我的家庭 wifi 网络)并尝试与远程服务器通信时,它无法连接到服务器。可能是什么问题呢 ?需要对代码进行任何更改,还是我需要在笔记本电脑上禁用防火墙?

我得到的错误是,错误:[Errno 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应

编辑: 将服务器代码更改为以下内容:

from socket import *

HOST = ''
PORT = 1999
serversocket = socket(AF_INET,SOCK_STREAM)
serversocket.bind((HOST,PORT))
serversocket.listen(5)
while True:
    (clientsocket, address) = serversocket.accept()
    print ("Got client request from",address)
    clientsocket.send("Thank You for connecting")
    clientsocket.close()

但是,仍然出现同样的错误。 当我在我的 linux 服务器上运行客户端和服务器代码时,服务器和客户端程序运行良好。但是当我从外部网络在笔记本电脑上运行客户端代码时,它不起作用。

【问题讨论】:

  • 在 labtop 和服务器上禁用防火墙。
  • @PhilipStuyck 在服务器上禁用防火墙不是永久的解决方案。在服务器上还有其他方法吗?
  • 您需要接受服务器上的连接。查看socket.accept()(接受一个连接,返回新的socket和客户端地址)
  • 谢谢。会尝试。当我使用 www.google.com 作为主机并使用 80 作为端口时,它运行良好。
  • @riotbit 请使用 accept() 查看上面更新的服务器代码。仍然出现同样的错误。

标签: python sockets tcp


【解决方案1】:

我认为主要问题是客户端正在等待数据,data = socket.recv(BUFSIZE) 是阻塞命令并且您没有从服务器发送数据,尝试发送一些东西

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the port
server_address = ('my-server-ipadress', 1999)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)
sock.listen(1)
 try:
        print >>sys.stderr, 'connection from', client_address

        # Receive the data in small chunks and retransmit it
        while True:
            connection.send("hello")
            data = connection.recv(16)
            print >>sys.stderr, 'received "%s"' % data
            if data:
                print >>sys.stderr, 'sending data back to the client'
                connection.sendall(data)
            else:
                print >>sys.stderr, 'no more data from', client_address
                break

    finally:
        # Clean up the connection
        connection.close()

更多逻辑然后编码 客户端也在等待数据,服务器也在等待, 所以在带来某人假设发送数据

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 2016-04-24
    • 1970-01-01
    • 2011-10-01
    • 2014-03-26
    • 2010-10-02
    • 1970-01-01
    • 2020-10-16
    • 2018-11-19
    相关资源
    最近更新 更多