我在 python 中尝试了超过 5 种不同的方法,尽管人们说它在其他论坛上有效,但所有这些方法都惨遭失败。
import socket
message = "test" clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) clientsocket.connect(('1.1.1.1', 80)) clientsocket.send(message.encode())
OR
`import socket
message = "test" sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.sendto(b"test",("1.1.1.1",80))`
我只是想将该死的数据发送到 1.1.1.1 作为测试为什么这这么垃圾**
的 Python 套接字代码似乎大体上是正确的,但无法发送数据可能有多种原因。以下是一些故障排除步骤和可能的解决方案:
-
检查防火墙和网络连接:
-
确保的防火墙或防病毒软件不会阻止来自 Python 脚本的出站连接。
-
验证是否可以访问互联网,并确认 1.1.1.1(Cloudflare 的公共 DNS 服务器)可通过运行
ping 1.1.1.1
从的系统访问。 -
1.1.1.1 和端口 80:
-
虽然 1.1.1.1 是一个有效的 IP 地址,但端口 80 通常用于 HTTP 流量。如果尝试发送原始的“测试”消息而不遵守 HTTP 协议,服务器(1.1.1.1)可能会丢弃的数据,因为数据格式不正确。
-
尝试其他端口: 考虑使用其他端口进行测试,例如 8080,或者设置一个本地服务器以获得更可控的环境。
-
TCP 与 UDP:
-
提供了 TCP(
SOCK_STREAM
)和 UDP(SOCK_DGRAM
)套接字的示例。它们是不同的协议,需要服务器端提供相应的设置。 - TCP: 需要建立连接。的 TCP 代码看起来正确,但服务器端必须侦听连接并在发送数据之前接受连接。
-
UDP: 无需连接。的 UDP 代码应该发送数据包,但服务器仍然必须侦听传入的数据包,并且可能无法以期望的方式做出响应。
-
错误处理:
-
的代码不包含任何错误处理。尝试包装的套接字操作
try...except
块以捕获并打印可能发生的任何异常。这可以提供有关问题原因的宝贵信息。
建议:
- 用于测试的简单服务器: 要简化测试,请考虑在本地计算机上设置一个简单的 Python 服务器,该服务器侦听特定端口上的传入连接或数据包。这将允许在受控环境中测试的套接字代码。
- 清晰的协议: 定义客户端和服务器将使用的明确协议。这可以像期望接收特定消息然后发送回确认消息一样简单。
改进代码示例(TCP,包含错误处理):
import socket
HOST = '1.1.1.1' # 尝试使用 'localhost' 进行本地测试服务器
PORT = 8080 # 选择其他端口
message = "test"
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as clientsocket:
clientsocket.connect((HOST, PORT))
clientsocket.sendall(message.encode())
data = clientsocket.recv(1024) # 接收来自服务器的可选响应
print('收到:', data.decode())
except Exception as e:
print(f"发生错误:{e}")
请记住,如果没有在目标 IP 地址和端口上运行的适当服务器,成功发送数据并接收响应的可能性很小。
标签:python,sockets From: 78780570