underAlex
underAlex

Reputation: 31

Python socket connection not working over Local Network

I'm trying to get two computers (my PC and my laptop) to communicate over the Local Network using the Socket module in python.

This is the Server side code running on my PC (connected via LAN):

import socket

HOST = '192.168.1.3' #local PC IP
print(HOST)
PORT = 8080        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            print(data)
            if not data:
                break
            conn.sendall(data)

And this is the Client side code, running on my Laptop (connected over WiFi):

import socket


TCP_IP = '192.168.1.3'
TCP_PORT = 8080
BUFFER_SIZE = 1024

MESSAGE = b"Hello, World!"

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

s.connect((TCP_IP, TCP_PORT))

s.send(MESSAGE)

data = s.recv(BUFFER_SIZE)

s.close()

print("received data:", data)

The thing is: when I execute both codes, the Server side stays idle waiting for a connection and the Client side, after a while stops and returns the following timeout error:

Traceback (most recent call last):
  File "C:\Users\...\client.py", line 13, in <module>
    s.connect((TCP_IP, TCP_PORT))
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

I can't understand why it won't connect from another device in the same network while it works perfectly if I execute the Client code on the same machine as the Server, even if when I run netstat -an in the CMD I can see the computer listening on that port:

TCP    192.168.1.3:8080       0.0.0.0:0              LISTENING

I tough it had something to do with the port forwarding so I tried playing around with it but I'm having troubles with that too (the ports seem to remain closed).

I really don't know what to do next, if you have some advice or know something else I could try please reply.

Upvotes: 0

Views: 8961

Answers (3)

Andrej Lozar
Andrej Lozar

Reputation: 23

In Windows 10, I had to open the port I was using for the socket, and it worked for me.

Here is a link to the instructions.

Upvotes: 2

StrangeSorcerer
StrangeSorcerer

Reputation: 314

You're listening and connecting to the same IP - you need to listen to the client's IP(or just any IP with the correct port number) on the server and connect to the server's IP on the client.

For example, if the client's IP is 1.2.3.4 and the server's is 1.2.3.5, then

# server side
s.bind(('1.2.3.4', 8080))  # CLIENT_IP = '1.2.3.4'; PORT = 8080

# can also be s.bind(('0.0.0.0', 8080)) if you want multiple clients to connect.
# client side
s.connect(('1.2.3.5', 8080))  # SERVER_IP = '1.2.3.5'; PORT = 8080

Upvotes: 0

underAlex
underAlex

Reputation: 31

It actually was a firewall problem, I just needed to disable the windows defender firewall for the local network and now everything is working fine

Upvotes: 2

Related Questions