【问题标题】:Server-Client chat program(Python sockets)服务器-客户端聊天程序(Python 套接字)
【发布时间】:2020-10-10 07:46:13
【问题描述】:

我想使用 python 套接字创建一个服务器-客户端聊天程序。我试图通过互联网连接服务器(我)和客户端(我的朋友),但我仍然无法理解这样做的方式。请帮帮我。

服务器:

import socket

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((my host, 12345))
s.listen(1)

conn, addr=s.accept()
while 1:
    msg=input(">>")    
    conn.send(msg.encode())
    print("Client:"+conn.recv(1024).decode())

客户:

import socket

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((my host, 12345))    
while 1:
    print("Server:"+s.recv(1024).decode())
    msg=input(">>")    
    s.send(msg.encode())

【问题讨论】:

  • 如何知道我的IP地址以便进入回显服务器中的主机?
  • 当您需要通过互联网连接时,它会更加复杂。但是服务器总是可以使用0.0.0.0。问题使客户端出现问题,因为它必须使用服务器用户只能使用网页检查的服务器外部 IP(因为它是 Internet Provider 路由器的 IP)。其他问题是某些 Internet 提供商可能每 24 小时更改一次此 IP。 Internet 提供商可能会阻止某些端口的其他问题,因此您可能无法使用某些非标准端口。
  • 那我该怎么办呢?
  • 在服务器上,您可以尝试0.0.0.0 和端口80(HTTP 的标准端口)-s.bind(("0.0.0.0", 80)。然后在服务器访问页面上,即。 httpbin.org/ip 获取服务器的外部 IP(即此时我有外部 IP 83.23.34.81),客户端应使用 s.connect("83.23.34.81", 80) 。但是,如果您的 Internet 提供商阻止了端口 80,那么您可能必须搜索其他端口 - 如果只有 Internet 提供商没有阻止所有端口,因为您无法更改它。您的本地路由器(用于访问互联网的服务器)可能会阻塞端口,但如果您有登录名/密码,则可以更改它。
  • 如何知道我服务器的关闭端口?

标签: python sockets connection client-server chat


【解决方案1】:

我推荐使用ngrok,它可以充当端口转发器,而无需自己动手。将 ngrok 下载到您的 system32 文件夹,然后在命令提示符中输入以下内容: ngrok tcp %PORT% 这将在 localhost ('0.0.0.0') 上创建一个 TCP 套接字,所以现在您必须对您的程序执行以下操作:

服务器:

s.bind(('0.0.0.0', %PORT%)) #你用于ngrok的端口`

客户:

s.connect(('NGROKHOSTIP', %NGROK FORWARDED PORT%))

可以通过域到 IP 程序找到 NGROKHOSTIP。你可以用 Python 自己做这件事。 另外,对不起,我无法更好地解释这一点,我是 stackoverflow 的新手。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多