2 years ago

#40616

test-img

Bakajanaino

How to transfer data between two devices on a LAN using Python socket

I had made a code for a small server-client GUI to make a connection between two devices on a LAN (its for a small game I am making) and when trying to connect the server and client when they both run on my computer it goes well, but when I try to connect my computer to someone else's it does not connect giving a "[WinError 10061] No connection could be made because the target machine actively refused it"

import socket
import sys
import tkinter as tk
import traceback


class SocketGUI:
    def __init__(self, root):
        self.conn = socket.socket
        self.PORT = 5050
        self.IPV4 = socket.gethostbyname(socket.gethostname())
        self.root = root
        self.client_var = True
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.root.geometry("100x100")
        frame = tk.Frame(master=self.root)
        button_client = tk.Button(master=frame, text="Create Client", command=lambda: self.choose_type(True))
        button_server = tk.Button(master=frame, text="Create Server", command=lambda: self.choose_type(False))
        button_client.grid(column=0, row=0)
        button_server.grid(column=0, row=1)
        frame.place(relx=0.5, rely=0.5, anchor="c")
        self.root.mainloop()
        frame.place_forget()
        self.root.update()
        self.root.geometry("")
        if self.client_var:
            self.entry = tk.Entry(self.root, width=15)
            self.entry_t = ''
            self.button = tk.Button(self.root, text="enter", command=self.entry_enter)
            self.root.bind('<Return>', self.button_enter)
        else:
            self.dot_label_var = ''
            self.dot_label = tk.Label(master=self.root, text=self.dot_label_var)
            self.s.setblocking(False)
            self.s.bind((self.IPV4, self.PORT))
            self.s.listen(5)
            self.connected = False
        self.run()

    def choose_type(self, variable):
        self.client_var = variable
        self.root.quit()

    def run(self):
        tk.Label(master=self.root, text="IPV4: " + self.IPV4).grid(column=0, row=0)
        if not self.client_var:
            tk.Label(master=self.root, text="waiting for connection").grid(column=0, row=1)
            self.dot_label.grid(column=0, row=2)
            self.dot_label.after(1000, self.dot_label_change())
        else:
            tk.Label(master=self.root, text="input IPV4").grid(column=0, row=1)
            self.entry.grid(column=0, row=2)
            self.button.grid(column=1, row=2)
        self.root.mainloop()

    def close(self):
        self.root.destroy()

    def button_enter(self, event=None):
        self.button.invoke()

    def entry_enter(self):
        self.entry_t = self.entry.get()
        self.entry.delete(0, 'end')
        try:
            self.s.connect((self.IPV4, self.PORT))
        except ConnectionRefusedError as e:
            print(sys.exc_info())
        else:
            self.entry.grid_remove()
            self.button.grid_remove()
            tk.Label(master=self.root, text="connection made").grid(column=0, row=2)
            self.root.after(3000, self.close)
            self.root.update()


    def dot_label_change(self):
        if len(self.dot_label_var) < 3:
            self.dot_label_var += '.'
            self.dot_label.configure(text=self.dot_label_var)
        else:
            self.dot_label_var = '.'
            self.dot_label.configure(text=self.dot_label_var)
        self.root.update()
        self.s.settimeout(1)
        try:
            self.conn, addr = self.s.accept()
        except socket.error:
            pass
        else:
            self.connected = True
        if self.connected:
            self.dot_label_var = "Connection made"
            self.dot_label.configure(text=self.dot_label_var)
            self.dot_label.after(3000, self.close)
        else:
            self.dot_label.after(500, self.dot_label_change)

this is the code for the server and client I do not understand much about LAN connections and hoped someone will be able to help me figure out why the server machine is blocking the client connection?

python

lan

python-sockets

0 Answers

Your Answer

Accepted video resources