【问题标题】:Python socket doesn't connect even when I tried all numbers in the range of 0-255即使我尝试了 0-255 范围内的所有数字,Python 套接字也无法连接
【发布时间】:2021-08-30 09:08:24
【问题描述】:

制作了一个非常简单的客户端-服务器,想检查是否仅通过检查 0-255 中的 ip 中的最后一个数字(例如 = '8.8.8.' 然后使用数字 0-255 作为最后一个数字) .但是,当我运行它时,它总是在 0 处暂停,然后它只是放大数字 1-255。知道为什么吗?

服务器:

import socket

server_socket = socket.socket()
server_socket.bind(('8.8.8.8', 5000))
server_socket.listen()

conn, addr = server_socket.accept()

msg = conn.recv(1024).decode()

print(msg)

客户:

import socket
ip = '8.8.8.'
client_socket = socket.socket()
for i in range(0,255):
    ip = ip +str(i)
    print(i)
    try:
        client_socket.connect((ip,5000))
        client_socket.send('yay'.encode())
    except socket.error:
        pass

顺便说一句,不,我没有使用 ip 地址 8.8.8.8 来绑定我的服务器套接字,这只是一个一般示例。我是说以防万一^^

【问题讨论】:

  • 我很确定你遇到了任何问题,因为你正在使用 except socket.error: pass 抑制所有套接字错误,如果你没有抑制它,你会看到你得到了一个例外第一次迭代,其余的一个不同的例外

标签: python sockets ip


【解决方案1】:

每次连接都需要一个新的套接字:

import socket

for i in range(0, 256):
    print(i)
    ip = f'8.8.8.{i}'
    try:
        client_socket = socket.socket()
        client_socket.connect((ip, 5000))
        client_socket.sendall('yay'.encode())
    except socket.error:
        pass

【讨论】:

  • 感谢您的回答...我能知道为什么我知道每次新的时候都要打开一个新的套接字吗?是因为之前的socket对象出错了还是connect方法将socket对象最终确定为一个确定的ip地址?
  • 是的,套接字一旦尝试连接就不能重复使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多