Page 1 of 1

Warum empfängt mein Server-Socket keine Daten?

Posted: 19 Jan 2025, 20:14
by Guest
Ich habe einige Probleme mit der Socket-Programmierung. Ich habe mit dem Erlernen dieses Themas begonnen und anhand des Tutorials eine kleine Echo-Server-/Client-Anwendung erstellt. Anschließend habe ich eine Multithread-Version davon für mehrere Clients erstellt. Es funktioniert gut mit dem folgenden Code:
Server:

Code: Select all

from Rest_Endpoint.thread import ConnectionThread

HOST = ''
PORT = 6000

def start_server():
server: socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
server.bind((HOST,PORT))
server.listen(10)
print('listen to port', PORT)
server.setblocking(False)

while True:
try:
conn, addr = server.accept()  # Will throw BlockingIOError if no connections
print('Connected by:', addr)
thread_spawn(conn, addr)
except BlockingIOError:
# No incoming connection; continue the loop
continue
except Exception as e:
print(f'Unexpected error: {e}')
break

def thread_spawn(conn, addr):
print('spawn new connection thread')
ConnectionThread(conn=conn, addr=addr).run()

def main():
start_server()

if __name__ == '__main__':
main()
Erzeugter Thread:

Code: Select all

import threading

class ConnectionThread(threading.Thread):
def __init__(self,conn,addr, **kwargs) -> None:
self.conn = conn
self.addr = addr
super().__init__()

def handle_data(self):
print('Connected by', self.addr)
while True:
print(f' waiting for message {self.__repr__()}')
data = self.conn.recv(1024)

if data:
print('prints data: ')
print(data)
self.conn.sendall(data)

def run(self) -> None:
self.handle_data()
Kunde:

Code: Select all

# Echo client program
import socket

HOST = ''    # The remote host
PORT = 6000              # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
# Connect to the server
s.connect((HOST, PORT))
print(f'Connected to server at {HOST}:{PORT}')

while True:
# message = input()
# bmessage = (message + '\n').encode('utf-8')
s.sendall(b'test')
# print(bmessage)'

except ConnectionRefusedError:
print(f"Could not connect to server at {HOST}:{PORT}. Ensure the server is running.")
except Exception as e:
print(f"An error occurred: {e}")
Wenn ich das Client-Programm starte, erhalte ich Folgendes:

Code: Select all

Connected by ('127.0.0.1', 51804)
waiting for message 
prints data:
b'testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest'
Ich verstehe, dass TCP ein Stream ist und aufgrund der while-True-Schleife erhalte ich dieses Ergebnis mehrerer Tests hintereinander.
Aber wenn ich versuche, den Client-Code zu ändern auf:

Code: Select all

 while True:
message = input()
bmessage = (message).encode('utf-8')
s.sendall(b'test')
print(bmessage)
Ich erhalte keine Nachricht auf der Serverseite und verstehe nicht warum. Es wird eine Verbindung hergestellt, aber ich erhalte keine Daten.
Vielleicht kann mir jemand mit einer Erklärung helfen.