【发布时间】:2021-09-03 05:25:12
【问题描述】:
首先我不是在谈论在 vps 或服务器中实现的 tcp 或 udp 或套接字
我的问题就像客户端到客户端的套接字通信。
想象一下在您的家用电脑上使用 tcp 套接字进行监听。无论如何,您都可以从家庭内部网络连接到此。但是假设有人想通过互联网连接到它。然后您可以在路由器上创建转发规则并使其进入工作状态。然后路由器知道如果传入的连接来自一个端口,该连接将被转发到相关内部网络中的设备。 但是我使用的 ISP 不支持端口转发。
我认为这并非不可能,因为有了团队查看器软件。因为当我在团队查看器中连接到朋友时,我打开了wire-shark 并查看了它。 然后我看到数据包是点对点交换的。因为目的源地址是我的ip和朋友的ip 这意味着视频数据的交换无需额外的服务器参与 我强调了团队查看器的连接。 61.245.175.81是我朋友的公网IP。 192.168.1.130是我的内部IP
我也想这样做
这是我的简单套接字代码。这不能通过互联网工作,因为没有路由器转发规则。我对套接字和网络方面很陌生
服务器
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('', 12000))
while True:
message, address = server_socket.recvfrom(1024)
message = repr(message)
print("Connected from -> " + str(address) )
print("Received data -> " + message)
reply = b"Hi from server :) "
server_socket.sendto(reply, address)
客户
import time , datetime
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.settimeout(1.0)
message = bytes(str(datetime.datetime.now()),'utf-8')
addr = ("192.168.1.130", 12000)
client_socket.sendto(message, addr)
try:
data, server = client_socket.recvfrom(1024)
print( repr(data) )
except: #socket.timeout:
print('REQUEST TIMED OUT')
谁能解释一下我的问题
【问题讨论】:
-
如果 A 和 B 想要通信,则 A 和 B 都打开到可以接受传入连接的服务器 C 的连接。所以 A C B.
标签: python sockets networking tcp udp