【发布时间】: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() 查看上面更新的服务器代码。仍然出现同样的错误。