I coded a simple python server and client but for some reason the communication closes unexpectedly.
I ran WireShark to keep tracking about what the client is doing and I see that after 2 minutes the client send a RST package for no reason.
The behavior I'm expecting is:
- Enginners clients send data to the server (No problem here)
- Server recieve data and waits for Press client
- Press client connect to the server sending his DCU (Client ID) and ask if there is info for him, if not, press client keeps connected to the server waiting for data.
Server:
import socketserver
import socket
import pickle
list_changes = []
list_dcu = set()
def connections(server):
conns = []
addrs = []
server.listen() # Server is listening
while True:
my_socket, addr = server.accept()
data_recv = pickle.loads(my_socket.recv(4096))
server.setblocking(1)
conns.append(my_socket)
addrs.append(addr)
# Registering, Appending and Search
if data_recv[0] == 'DCU':
try:
append_dcu(data_recv)
search_changes(data_recv)
except IndexError:
print('errrrrrrror')
elif data_recv[0] == 'ING':
list_changes.append(data_recv)
def append_dcu(data_recv): # Appending function
list_dcu.add(data_recv[1])
print('List DCU: ', list_dcu)
return
def search_changes(data_recv): # Search for DCU in list_changes and send data if found
i = 0
for i in range(len(list_changes)):
if data_recv[1] == list_changes[i][2]:
response = pickle.dumps(list_changes[i])
request.sendall(response)
del list_changes[i]
return
if __name__ == "__main__":
host, port = "127.0.0.1", 9999
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
connections(server)
Client:
import socket
import pickle
import threading
from view import MainView, msg_alert
class AppInit:
def __init__(self):
self.controller = Controller()
self.view = MainView(self.controller)
return
class Controller:
def __init__(self):
# self.th1 =
return
class Threading:
def __init__(self, var_dcu):
self.host = '127.0.0.1' # my_socket IP - Change it in Test Environment
self.port = 9999
self.var_dcu = var_dcu
self.data = ''
self.data_send = 0
self.th1 = threading.Thread(target=search, args=(self.var_dcu, self.host, self.port))
self.th1.daemon = True
self.th1.start()
def search(var_dcu, host, port):
data = ('DCU', var_dcu)
data_send = pickle.dumps(data)
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))
my_socket.connect(('127.0.0.1', 9999))
my_socket.sendall(data_send)
I'm using Python 3.7
Thanks in advance. Any help will be appreciated