Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TCP服务器在LAN或WAN上不工作? Python TCP服务器无法访问LAN或WAN_Python_Python 3.x_Tcp - Fatal编程技术网

Python TCP服务器在LAN或WAN上不工作? Python TCP服务器无法访问LAN或WAN

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

好的,我用Python3编程了一个TCP服务器 它使用Telnet和客户端程序在本地主机(127.0.0.1)端口1200上正常工作,但当我从网络上的另一台计算机或Internet上的另一台计算机尝试时,它失败了 同时使用客户端或Telnet:\就像没有任何服务器启动一样 如果你问是的,我在路由器后面 那么我必须设置端口转发之类的东西吗? 或者我的代码有问题? 顺便说一句,我试着关闭我的防火墙


这是服务器:

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。