2 years ago
#40616
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