socket nimmt immer nur eine Message von jedem Programmdurchlauf entgegen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Flatterapfel
User
Beiträge: 1
Registriert: Sonntag 24. April 2022, 13:47

Also hallo erstmal.
Ich habe gerade mit der Progammierung von Sockets angefangen und es dank einiger Tutorials auch geschafft einen Server und einen Clienten (auf dem selben Gerät) zu bauen. Das Problem ist, dass ich für jede Message mein Clientprogramm neustarten muss und nicht einfach mehrere Nachrichten in einem Durchlauf abschicken kann. ist das normal oder mache ich etwas falsch.
hier meine Codes:
der server:

Code: Alles auswählen

import socket
from time import sleep
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port=2345
s.bind(('*IP-Adresse*',port))
s.listen(2)
try:
    while True:
        (client_socket, addr) = s.accept()
        msg=client_socket.recv(1024)
        sleep(3)
        msg_rec=client_socket.send(bytes('recall','utf-8'))
        print(str(msg,'utf-8'))
        if str(msg,'utf-8')=='+stop+':
            break

finally:
    s.close()
    
der client:

Code: Alles auswählen

import socket
from time import sleep
def msg_send():
    message='annything'
    cs.send(bytes(message,"utf-8"))
    msg=cs.recv(1024)
    print(str(msg,'utf-8'))
cs=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port=2345
cs.connect(('*IP-Adresse*',port))
try:
    msg_send()
    sleep(2)
    msg_send()
finally:
    cs.shutdown(1)
    cs.close()
    
__deets__
User
Beiträge: 11926
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da es ja Chat-Programme gibt, bei denen du NICHT jedes mal das Programm neu starten musst, um deiner Oma eine Nachricht zu schreiben, kannst du dir die Frage, ob das normal ist ja eigentlich selbst beantworten, oder?

Was macht denn dein Server substantiell anders, was dein client nicht macht, und weshalb er "endlos" laeuft?

Dein Programm zeigt im uebrigen auch die gleichen Fehler, die man bei 99.99% aller Socket-Programme sieht. Wir diskutieren das hier mit grosser Regelmaessigkeit. Sockets und Protokoll, sowie sendall sind gute Suchbegriffe hier im Forum (ggf. via Google, die Forumssuche selbst ist so naja).
Flatterapfel
User
Beiträge: 1
Registriert: Sonntag 24. April 2022, 13:47

hab mittlerweile herausgefunden, wo das Problem liegt und frage daher: Kann man s.accept() irgendwie im Hintergrund laufen lassen bzw. einfach nur ausführen, wenn ein Client versucht sich zu verbinden?
Zuletzt geändert von Flatterapfel am Sonntag 24. April 2022, 18:11, insgesamt 1-mal geändert.
Antworten