Sockets – Python – connection keeps getting refused

chatlanpython-3.xsockets

Im creating a small LAN chat using python and for some reason i keep getting my connection refused. Here is the error:

File "client.py", line 35, in
data, addr = s.recvfrom(1024) ConnectionRefusedError: [Errno 111] Connection refused

Here is the server.py code:

import socket
from time import sleep

host = '127.0.0.1'
port = 5000
ips = []

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))

print('server started')

quitS = False
while not quitS:
    data, addr = s.recvfrom(1024)
    if 'quitS' in str(data):
        print('server will close in...')
        for i in reversed(range(4)):
            sleep(1)
            print (i)
        quitS = True
        break
    print (str(addr) + ': '+str(data))
    if addr not in ips:
        ips.append(addr)
    for ip in ips:
        s.sendto(data, ip)

s.close()

And my client.py:

import socket
from time import sleep
from getpass import getpass

host = '192.168.1.126'
port = 5000

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((host, port))

loop = True
while loop:
    try:
        s.settimeout(4)
        text = input('Type: ')
        data = text.encode('UTF-8')
        if text == 'quitS':
            passwd = False
            pcount = 0
            while not passwd:
                pcount += 1
                pwd = getpass()
                if pwd == '1234':
                    s.send(data)
                    passwd = True
                elif pcount == 3:
                    print ('HHell no, go away')
                    break
        elif text == 'q':
            s.close()
            break
        elif text == '':
            print('Inavalid, entry not allowed.')
        else:
            s.send(data)
            data, addr = s.recvfrom(1024)
            print (str(addr) + ': ' + str(data))
    except (socket.timeout, ConnectionResetError):
        loop = False
        sleep(2)
        print('Server is dead, will close in...')
        for i in reversed(range(4)):
            sleep(1)
            print (i)

The server.py is running on my RPi and his is my ufw status verbose output:

5000                       ALLOW IN    Anywhere
6001                       ALLOW IN    Anywhere
5001                       ALLOW IN    Anywhere
22                         ALLOW IN    Anywhere
5900                       ALLOW IN    Anywhere
5800                       ALLOW IN    Anywhere
5000                       ALLOW IN    Anywhere (v6)
6001                       ALLOW IN    Anywhere (v6)
5001                       ALLOW IN    Anywhere (v6)
22                         ALLOW IN    Anywhere (v6)
5900                       ALLOW IN    Anywhere (v6)
5800                       ALLOW IN    Anywhere (v6)

5000                       ALLOW OUT   Anywhere
5000                       ALLOW OUT   Anywhere (v6)

The client.py ufw setup is pretty much the same, i have allowed in and out on port 5000.

What am i doing wrong? And also if you have suggestions for the code let me know!

Best Answer

In server.py, change host = '127.0.0.1' to host = '0.0.0.0'. Listening on 127.0.0.1 will only allow connections from localhost. See What is the difference between 0.0.0.0, 127.0.0.1 and localhost? for deeper explanation.