7

私はこの点でかなり素朴です。接続がタイムアウトする理由がわかりません。前もって感謝します。

#!/usr/bin/env python
import socket

def socket_to_me():
    socket.setdefaulttimeout(2)
    s = socket.socket()
    s.connect(("192.168.95.148",21))
    ans = s.recv(1024)
    print(ans)

このコードによって生成されたトレースバック

Traceback (most recent call last):
  File "logger.py", line 12, in <module>
    socket_to_me()
  File "/home/drew/drewPlay/python/violent/networking.py", line 7, in socket_to_me
    s.connect(("192.168.95.148",21))
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
timeout: timed out
4

3 に答える 3

5

すべての新しいソケットのデフォルトのタイムアウトを変更する必要はありません。代わりに、その特定の接続のタイムアウトを設定するだけです。ただし、値は少し低いので、10〜15秒に増やすとうまくいくと思います。

まず、これを行います:

s = socket.socket()

それで:

s.settimeout(10)

また、接続時に「try:」を使用して、次を追加する必要があります。

except socket.error as socketerror:
    print("Error: ", socketerror)

これにより、出力にシ​​ステムエラーメッセージが表示され、例外が処理されます。

コードの変更バージョン:

def socket_to_me():
    try:
        s = socket.socket()
        s.settimeout(2)
        s.connect(("192.168.95.148",21))
        ans = s.recv(1024)
        print(ans)
        s.shutdown(1) # By convention, but not actually necessary
        s.close()     # Remember to close sockets after use!
    except socket.error as socketerror:
        print("Error: ", socketerror)
于 2012-12-15T04:22:35.220 に答える
0

192.168.95.148を127.0.0.1(localhost-自分自身に接続)に変更し、同じマシンでこのプログラムを実行します。そうすれば、接続するものができます。

于 2014-08-13T18:09:38.253 に答える
0

それは偽のアドレスです。それを機能させたい場合は、暴力的なpythonを読んでいると思います。偽のIPアドレスの代わりに socket.gethostname()と入力すると、マシンに接続されます。これが私のコードです。

    def Socket_to_me(ip,port,time):
        try:
            s = socket.socket()
            s.settimeout(time)
            s.connect((ip,port))
            ans = s.recv(1024)
            print(ans)
            s.shutdown(1) # By convention, but not actually necessary
            s.close()     # Remember to close sockets after use!
        except socket.error as socketerror:
            print("Error: ", socketerror) 

call the method by:
Socket_to_me(socket.gethostname(),1234,10)
于 2020-07-16T15:24:19.660 に答える