6

TCPソケットを開いてJSONデータを送信するように設計された非常に単純なpythonスクリプトを作成しています。(私はPythonが初めてです)

スクリプトを実行すると、次のエラーが表示されます。

Traceback (most recent call last):
  File "JSONTest.py", line 17, in <module>
    s.connect('10.12.0.30', 6634)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
TypeError: connect() takes exactly one argument (2 given)

私のスクリプトは以下の通りです:

#Imports
import socket
import json
import time

data = "{\"method\": \"echo\",\"id\": \"echo\",\"params\": []}"

#Create socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#Establish TCP session via IP address and port specified
s.connect('10.12.0.30', 6634)

#Send JSON to socket
s.send(json.dumps(data))

#Wait for response and print to console
result = json.loads(s.recv(1024))
#print str(result)

#Exit
s.close()

ソケット ライブラリのドキュメントを確認したところ、connect() には単一の引数、つまり目的の宛先 IP アドレスのみがリストされています。それで、私の質問は、connect()メソッドでTCPポートを入力できない場合、TCPポートも指定している上記をどのように行うことができるかということです。

また、これを達成するためのより良い方法についても意見を求めています。

4

4 に答える 4

18

ホストとポートはタプルでなければなりません。

s.connect(('10.12.0.30', 6634))

ここにある Python Socket ドキュメントの例の 2 番目の部分を参照してください。

于 2013-10-02T17:33:46.607 に答える
4

1 つの引数で呼び出す必要がありconnectます: ホストとポートのタプル:

s.connect(('10.12.0.30',6677))
于 2013-10-02T17:35:20.193 に答える
0

socket.getaddrinfo を使用してこの解決策を確認します。

ainfo = socket.getaddrinfo("10.12.0.30",6677)
s.connect(ainfo[0][4])
于 2016-11-06T00:50:43.203 に答える