【问题标题】:I am trying to use IPv6 address on Socket (Python)我正在尝试在 Socket (Python) 上使用 IPv6 地址
【发布时间】:2020-06-12 21:39:32
【问题描述】:

我正在尝试在 Socket 上使用我的 IPv6 地址,但是当我输入要发送到 IPv6 地址所链接到的设备的文本时,它只会停止并关闭终端。


import sys, os
from socket import socket, AF_INET, SOCK_DGRAM
while True:
    SERVER_IP   = '[Hidden for security reasons]'
    PORT_NUMBER = 5000
    SIZE = 1024
    print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER))

    mySocket = socket( AF_INET, SOCK_DGRAM )
    myMessage = input('Enter your message: \n')
    mySocket.sendto(myMessage.encode('utf-8'),(SERVER_IP,PORT_NUMBER))
    clr = os.system('cls')

【问题讨论】:

  • 对于初学者,您可能希望将 shell 调用放到cls 以查看如果遇到任何错误会怎样,并从终端调用脚本以观察行为。那么您可能需要检查docs,因为您没有看到的错误可能与尝试使用(此处未显示)AF_INET 域的 IPv6 地址(带有两个元组)而不是AF_INET6(有一个四元组)。
  • 您想使用AF_INET6,虽然可以使用2元组,但您可能需要将其扩展为(SERVER_IP,PORT_NUMBER,0,0)

标签: python sockets


【解决方案1】:

可能会引发异常。从完成后未关闭的终端运行脚本,您会看到错误。

内置的 IDLE 编辑器可以正常工作。 (我假设你在 Windows 上,因为在这个平台上,有终端在进程退出时关闭)

编辑:至于错误,我认为您的参数错误。这里已经回答了:Establishing an IPv6 connection using sockets in python

【讨论】:

  • 好的,这是我的错误。发生异常:gaierror [Errno 11001] getaddrinfo failed File "C:\Users\Jacob B\Documents\1 Code\Python\Networking\Test client 1.py", line 13, in mySocket.sendto(myMessage. encode('utf-8'),(SERVER_IP,PORT_NUMBER)) 而且我看不懂。
  • @BnDLett_Coding - 还将您的代码更改为AF_INET6。我认为套接字正在尝试使用 ipv6 地址作为主机名。
  • @tdelaney 所以基本上是这样的? import sys, os from socket import socket, AF_INET6, SOCK_DGRAM while True: SERVER_IP = '[removed for security reasons]' PORT_NUMBER = 5000 SIZE = 1024 print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER)) mySocket = socket( AF_INET6, SOCK_DGRAM ) myMessage = input('Enter your message: \n') mySocket.sendto(myMessage.encode('utf-8'),(SERVER_IP,PORT_NUMBER)) clr = os.system('cls')
  • 这对我来说是正确的。在我的家庭网络上,我收到“网络无法访问”,因为我的互联网提供商没有路由它。
猜你喜欢
  • 2013-12-16
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2017-11-05
  • 2013-04-23
  • 2012-08-02
  • 1970-01-01
相关资源
最近更新 更多