好的,所以我使用Python 3编写了一个TCP服务器 它正常工作在Localhost(127.0.0.1)端口1200使用Telnet和客户端程序但是当我尝试从网络上的另一台计算机或从Internet上的另一台计算机它失败 使用客户端或Telnet:\就像没有任何服务器Up 如果你好,请问我是在路由器后面 那么我必须设置类似港口转发或东西的东西吗? 或者我的代码有什么问题? 顺便说一句,我试着关闭我的防火墙。
Well Heres 服务器:
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()))
这是我在服务器中导入的Clients.py:
Clients = []
def AddClient (ClientAdress) :
Clients.append(ClientAdress)
以下是客户:
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和时间 我注释了为某些问题发送消息的部分内容。 我不认为这是代码的问题,因为它正常工作在localhost上。 无论如何Thabks求助:)
答案 0 :(得分:0)
我认为你需要在服务器代码中指定服务器的IP地址,以便它绑定到正确的适配器。
HOST = socket.gethostbyname(socket.gethostname())
s.bind((HOST, Port))