python - 在 python 中,套接字服务器

我试着设置一个本地服务器,以便同一本地网络上的其他PC可以连接到它,当尝试这样做时,在客户端上,我得到以下错误: [errno 10061]无法连接,因为目标计算机主动拒绝它,

我已经搜索了几个小时,仍然无法解决这个问题,我也尝试关闭我的防火墙,但是没有用。

以下是我的服务器和客户端代码:

服务器代码:


import socket
import threading
import SocketServer
import datetime

ver_codes = []



class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
 def handle(self):
 print threading.current_thread().isDaemon()
 data = self.request.recv(1024)
 command = data.split()[0]
 if(command=="login"):
 if(logged_in(data.split()[1])==False):
 self.request.sendall(login(data.split()[1], data.split()[2]))
 else:
 self.request.sendall("already in")


class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
 pass

def client(ip, port, message):
 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 sock.connect((ip, port))
 try:
 sock.sendall(message)
 response = sock.recv(1024)
 print "Received: {}".format(response)
 finally:
 sock.close()

def logged_in(id_num):
 for i in ver_codes:
 if(i[0]==id_num):
 return True
 return False

def login(username, password):
 login_file = open("Login.txt", "r")
 match = login_file.readline()
 while(match!="*"):
 if(match.split()[0]==username):
 if(match.split()[1]==password):
 ver_codes.append([match.split()[0], encryption_code(match.split()[2])])
 login_file.close()
 return "{} {}".format(match.split()[2], encryption_code(match.split()[2]))
 print "And Here"
 match = login_file.readline()
 return "Denied"
 login_file.close()

def encryption_code(to_encrypt):
 now = datetime.datetime.now()
 return int(str(now.microsecond)) * int(to_encrypt)


if __name__ == "__main__":
HOST, PORT = "localhost", 7274

server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
print server.server_address

server_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = False
server_thread.start()
print "Server loop running in thread:", server_thread.name

客户端代码:


import socket
import sys

HOST, PORT = "localhost", 7274
data = " ".join(sys.argv[1:])

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
sock.connect((HOST, PORT))
sock.sendall("login mahdiNolan m1373")

received = sock.recv(1024)
finally:
sock.close()

我非常感激你给我的任何帮助!非常感谢!

时间:

你的问题是你正在监听localhost -,这将只接受来自本地机器的连接。

如果你想接受来自任何地方的连接,不能是"localhost", 只需要是空字符串 "" ,简而言之,这意味着"接受任何本地接口上的连接"

此外,在客户端,您应该使用计算机的实际地址 - 将"localhost "替换为服务器计算机的IP地址或主机名。比如,"192.168.0.99"之类的东西,如果你想在Windows下找到服务器的IP地址,打开DOS窗口,并且运行ipconfig命令,查找带有IPv4地址的行(假设你有一个IPv4网络)。

Windows防火墙也会阻止服务器接受您已经找到的连接,但是,您不应该禁用它 - 只要您运行服务器,您应该会看到一个弹出窗口,您可以指示它接受连接(在Windows 7上,在其他版本上可能会有所不同)。在任何情况下,关闭软件防火墙应该一切正常工作,尽管这存在安全风险, 超出了本问题的范围。

...