Warum empfängt mein Server-Socket keine Daten?Python

Python-Programme
Guest
 Warum empfängt mein Server-Socket keine Daten?

Post 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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post