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
. 我如何摆脱这个错误?
套接字地址表示如下: ...一对(主机,端口)用于 AF_INET 地址系列,其中主机是一个字符串,表示互联网域符号中的主机名,如“daring.cwi.nl”或 IPv4 地址像'100.50.200.5',端口是一个整数。
和
插座。连接(地址)
连接到地址处的远程套接字。(地址的格式取决于地址族——见上文。)
Run Code Online (Sandbox Code Playgroud)Note This method has historically accepted a pair of parameters for AF_INET addresses instead of only a tuple. This was never intentional
并且在 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() 具有相同的含义。返回发送的字节数。(地址的格式取决于地址族——见上文。)