我正在尝试使用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服务器上运行客户端和服务器代码时,服务器和客户端程序运行良好。但是,当我从外部网络在笔记本电脑上运行客户端代码时,它不起作用。
答案 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()
更多逻辑然后编码 客户端正在等待数据,服务器也在等待数据, 所以带某人假设要发送数据