user7988893
user7988893

Reputation:

OSError: [Errno 22] Invalid argument for udp connection

The udp server and client on my local pc.

cat server.py
import socket
MAX_BYTES =65535

def server():
    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    sock.bind(('127.0.0.1',10000))
    print('Listening at {}'.format(sock.getsockname()))
    while True:
        data,address = sock.recvfrom(MAX_BYTES)
        text = data.decode('ascii')
        print('The client at {} says {!r} '.format(address,text))

if __name__ == "__main__":
    server()

Bind port 10000 with localhost-127.0.0.1,and listening to the message send from client.

cat client.py
import socket
import time
from datetime import datetime
MAX_BYTES =65535

def client():
    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    sock.bind(('127.0.0.1',10001))
    text = 'The time is {}'.format(datetime.now())
    data = text.encode('ascii')
    while True:
        time.sleep(10)
        sock.sendto(data,('127.0.0.1',10000))
        print('The OS assinged me the address {}'.format(sock.getsockname()))

if __name__ == "__main__":
    client()

Run the server.py and client.py on my local pc,server can receive message send from client.

Now i change 127.0.0.1 in the line in client.py with my remote vps_ip.

sock.sendto(data,('127.0.0.1',10000))

into

sock.sendto(data,('remote_ip',10000))

Push server.py into my vps.Start client.py on my local pc,server.py on remote vps,start them all. In my client,an error info occurs:

  File "client.py", line 13, in client
    sock.sendto(data,('remote_ip',10000))
OSError: [Errno 22] Invalid argument

How to make remote ip receive message send from my local client pc?

Upvotes: 4

Views: 3983

Answers (1)

Liam Kelly
Liam Kelly

Reputation: 3714

Two things that could be happening:

  1. You're not passing the remote IP correctly. Make sure that your not passing literally 'remote_ip' and replace it with a valid IPv4 IP address string (IE: '192.168.0.100') for the server. (FYI technically on the server you can just put '0.0.0.0' to listen on all IP addresses)
  2. You could still be binding the client to the local address to (127.0.0.1), but setting the destination to a valid external address (192.168.0.100). Remove the socket.bind line of code in the client to test this, you shouldn't need it.

If these both don't work, then add the results of a ping command running on the client and targeting the server.

Upvotes: 2

Related Questions