Socket hängt sich auf...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

hey
hab grad versucht, einen socket mit server und client (beide vertreten durch meinen rechner) nach einem tutorial zu schreiben.

Code: Alles auswählen

import socket
import sys
from thread import *


host = ''
port = 5555

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:
    s.bind((host,port))
except socket.error as e:
    print (str(e))

s.listen(5)
print ('Waiting for a connetion...')


def threaded_client(conn):

    conn.send(str.encode('Welcome, type your info\n'))

    while True:
        data = conn.recv(2048)
        reply = 'Server output: '+data.decode('utf-8')
        if not data:
            break
        conn.sendall(str.encode(reply))

    conn.close()

while True:
    conn,addr = s.accept()
    print ('connected to: '+addr[0]+':'+str(addr[1]))
    start_new_thread(threaded_client,(conn,))
anders als im tutorial, hängt sich mein rechner aber jedesmal auf. ich bekomme keinerlei
fehlermeldung, sondern nach ein paar sekunden sagt das programm: ....(Keine Rückmeldung).
an der firewall liegt es nicht, die war komplett aus :(
(komisch is, dass im tutorial _thread import *. was für ein modul muss man da installieren: threadpool-1.3.2-py2-none-any.whl? )
Zuletzt geändert von Anonymous am Mittwoch 10. August 2016, 16:54, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Was auch immer du da für ein Tutorial gefunden hast, es ist völlig unbrauchbar. Das Script hängt nicht es wartet auf IO der nie passiert.
BlackJack

@DMD-OL: Für `_thread` müsste man Python 3 verwenden *aaaber* egal ob nun `thread` oder `_thread` sollte man dieses Modul gar nicht verwenden, denn das ist schon seit einer Eeeewigkeit vom `threading`-Modul abgelöst worden. In dem Quelltext sind aber noch ein Haufen anderer schräger Sachen drin, so dass ich auch von dem Tutorial grundsätzlich abraten würde, dass solche Sachen propagiert.
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

also gut:

Code: Alles auswählen

import socket

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(("127.0.0.1",8000))
sock.listen(2)
(client,(ip,port)) = sock.accept()
Mit der Eingabeaufforderung ausgefuehrt, sucht/wartet er hier brav.
Mit PyScripter ausgefuehrt, wird nach ein paar Sekunden "Keine Rueckmeldung" angezeigt.
???
Ohne dass sich ein Client anmeldet, sollte er doch trotzdem warten, oder?
Wenn ich den oberen code mit linux ausführe, kann ich mich mit

Code: Alles auswählen

nc 127.0.0.1 8000
als client anmelden. funktioniert, nur unter windows mit pyscripter nicht.
PS: ich bin im öffentlichen Uni-Netzwerk.
Zuletzt geändert von DMD-OL am Donnerstag 11. August 2016, 12:14, insgesamt 1-mal geändert.
BlackJack

@DMD-OL: Dann führe es halt nicht mit PyScripter aus. :-)
Antworten