TCP套接字python超时公共IP地址

时间:2015-03-29 08:53:25

标签: python sockets tcp

我正在尝试使用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服务器上运行客户端和服务器代码时,服务器和客户端程序运行良好。但是,当我从外部网络在笔记本电脑上运行客户端代码时,它不起作用。

1 个答案:

答案 0 :(得分:0)

我认为主要的问题是客户端正在等待数据,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()

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