ValueError:使用套接字时要解压的值太多

Mil*_*ala 1 sockets google-app-engine python-2.7

import socket
import time
HOST = "192.168.x.x"
PORT = 5454
data = "Hello"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(HOST,PORT)
while  True:
   s.sendto(data(HOST,PORT))
   print "send" + data
   time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/base/data/home/apps/s~lyfe-playtm/20161117t121204.397114004363270281/main.py", line 24, in <module>
    s.connect(HOST,PORT)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/socket.py", line 222, in meth
    return getattr(self._sock,name)(*args)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/remote_socket/_remote_socket.py", line 752, in connect
    address_hostname_hint=_hostname_hint)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/remote_socket/_remote_socket.py", line 590, in _CreateSocket
    address_hostname_hint)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/remote_socket/_remote_socket.py", line 632, in _SetProtoFromAddr
    address, port = address
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

我正在尝试在 Google App Engine 中使用套接字。这是我放在我的main.py. 我如何摆脱这个错误?

Dan*_*scu 5

17.2. socket — 低级网络接口

套接字地址表示如下: ...一对(主机,端口)用于 AF_INET 地址系列,其中主机是一个字符串,表示互联网域符号中的主机名,如“daring.cwi.nl”或 IPv4 地址像'100.50.200.5',端口是一个整数。

插座。连接(地址)

连接到地址处的远程套接字。(地址的格式取决于地址族——见上文。)

Note

This method has historically accepted a pair of parameters for AF_INET addresses instead of only a tuple. This was never intentional
Run Code Online (Sandbox Code Playgroud)

并且在 Python 2.0 及更高版本中不再可用。

这意味着你应该改变

s.connect(HOST,PORT)
Run Code Online (Sandbox Code Playgroud)

s.connect((HOST,PORT))
Run Code Online (Sandbox Code Playgroud)

同样下面的变化

   s.sendto(data(HOST,PORT))
Run Code Online (Sandbox Code Playgroud)

   s.sendto(data, (HOST,PORT))
Run Code Online (Sandbox Code Playgroud)

附注:在使用s.sendto()的插座应相连(或降s.connect()或使用s.send()s.sendall()):

socket.sendto(string, address) socket.sendto(string, flags, address)

向套接字发送数据。套接字不应连接到远程套接字,因为目标套接字是由地址指定的。可选的 flags 参数与上面的 recv() 具有相同的含义。返回发送的字节数。(地址的格式取决于地址族——见上文。)