Python TCP服务器在LAN或WAN上不工作? Python TCP服务器无法访问LAN或WAN
好的,我用Python3编程了一个TCP服务器 它使用Telnet和客户端程序在本地主机(127.0.0.1)端口1200上正常工作,但当我从网络上的另一台计算机或Internet上的另一台计算机尝试时,它失败了 同时使用客户端或Telnet:\就像没有任何服务器启动一样 如果你问是的,我在路由器后面 那么我必须设置端口转发之类的东西吗? 或者我的代码有问题? 顺便说一句,我试着关闭我的防火墙Python TCP服务器在LAN或WAN上不工作? Python TCP服务器无法访问LAN或WAN,python,python-3.x,tcp,Python,Python 3.x,Tcp,好的,我用Python3编程了一个TCP服务器 它使用Telnet和客户端程序在本地主机(127.0.0.1)端口1200上正常工作,但当我从网络上的另一台计算机或Internet上的另一台计算机尝试时,它失败了 同时使用客户端或Telnet:\就像没有任何服务器启动一样 如果你问是的,我在路由器后面 那么我必须设置端口转发之类的东西吗? 或者我的代码有问题? 顺便说一句,我试着关闭我的防火墙 这是服务器: import socket import time import sys import
这是服务器:
import socket
import time
import sys
import Clients
Port = 1200
MaxConnections = 5
try :
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except :
print("Something Went Wrong Creating The Scoket and Going to exit.")
sys.exit()
#Bind on The Connection Port
sock.bind(("",Port))
print("")
#Listen to Connections
sock.listen(MaxConnections)
print("")
while True:
client,addr = sock.accept()
Clients.AddClient(client)
print("")
rcName = client.recv(1024)
print(rcName.decode('ascii'),"Connected to Server", addr , time.ctime(time.time()))
import socket
from socket import *
import urllib
import sys
import os
import time
import string
serverIp = str(input("Enter The Server Ip Adress : "))
serverPort = int(input("ENter The Server's Port : "))
name = "MyName"
#Creating Sockets
sock = socket (AF_INET,SOCK_STREAM)
try :
sock.connect((serverIp,serverPort))
except :
print("Failed to Connect to Server")
sys.exit
#This Part Sends The Name of The Client to The Serevr
data = name
sock.send(data.encode('ascii'))
print("")
print (" ---------------------- Connected to Server ---------------------- ")
while True :
#Wont Do ANything for Now cuz i Removed The Sending Mesage Part from The Server
rCData = sock.recv(1024)
print (rcData)
这是我在服务器中导入的Clients.py:
Clients = []
def AddClient (ClientAdress) :
Clients.append(ClientAdress)
.
这是客户机:
import socket
import time
import sys
import Clients
Port = 1200
MaxConnections = 5
try :
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except :
print("Something Went Wrong Creating The Scoket and Going to exit.")
sys.exit()
#Bind on The Connection Port
sock.bind(("",Port))
print("")
#Listen to Connections
sock.listen(MaxConnections)
print("")
while True:
client,addr = sock.accept()
Clients.AddClient(client)
print("")
rcName = client.recv(1024)
print(rcName.decode('ascii'),"Connected to Server", addr , time.ctime(time.time()))
import socket
from socket import *
import urllib
import sys
import os
import time
import string
serverIp = str(input("Enter The Server Ip Adress : "))
serverPort = int(input("ENter The Server's Port : "))
name = "MyName"
#Creating Sockets
sock = socket (AF_INET,SOCK_STREAM)
try :
sock.connect((serverIp,serverPort))
except :
print("Failed to Connect to Server")
sys.exit
#This Part Sends The Name of The Client to The Serevr
data = name
sock.send(data.encode('ascii'))
print("")
print (" ---------------------- Connected to Server ---------------------- ")
while True :
#Wont Do ANything for Now cuz i Removed The Sending Mesage Part from The Server
rCData = sock.recv(1024)
print (rcData)
服务器现在只打印连接的客户端的名称及其Ip和时间 对于一些问题,我注释掉了发送消息的部分。 我认为代码没有问题,因为它在本地主机上正常工作。
无论如何,Thabks需要帮助:)我认为您需要在服务器代码中指定服务器的IP地址,以便它绑定到正确的适配器
HOST = socket.gethostbyname(socket.gethostname())
s.bind((HOST, Port))
你能试着把你的代码精简到最基本的部分吗?例如,装饰性打印调用是不必要的-但请尝试给我们一个@AlexThornton Done:)。很抱歉,这不起作用:\n仍然是相同的问题,无论如何,感谢您的帮助,顺便说一句,我现在使代码更易于阅读。我也怀疑绑定是问题所在。是否可以显式绑定到服务器ip而不是gethostbyname?在客户端中作为命令行参数传递的同一服务器IP。另外,确保serverIP可以从cleint ping。