2016-06-02 3 views
0

Ich fand dieses Skript des TCP-Servers, der die Daten an den Client "zurückgibt".Einfacher TCP EchoServer in Python

#!/usr/bin/env python 

import socket 

host = '' 
port = 50000 
backlog = 5 
size = 1024 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog) 
while 1: 
    client, address = s.accept() 
    data = client.recv(size) 
    if data: 
     client.send(data) 
    client.close() 

Ich versuche es & verstehen zu testen, bevor ich in der Lage sein wird, etwas auf eigene Faust und ändern zu tun, aber ich habe einige Probleme. Wenn ich versuche, den Py-Skript ausführen ich die folgenden Fehler in meinem Terminal bekommen (mit Ubuntu 14.04 LTS)

> Traceback (most recent call last): 
    File "echo.py", line 14, in <module> 
    s.bind((host,port)) 
    File "/usr/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
socket.error: [Errno 98] Address already in use 

Mein Python-Version ist 2.7.6

ist es etwas falsch mit dem Code oder mache ich etwas falsch?

UPDATE:

es kommt noch schlimmer, jedes Skript ich mit bind(host, port) laufen, gibt mir die gleichen Fehler.

würde jede mögliche Hilfe

+0

Versuchen Sie einen anderen Wert für 'port' verwenden. –

+0

@AlexHall das war meine erste Schätzung, ich habe versucht wie 10 verschiedene aber Fehler ist immer noch der gleiche – Leonardo

Antwort

2

Sie versehentlich den Echoserver in verschiedenen Fenstern zweimal lief Vielleicht geschätzt werden? Sie können nur einen Empfänger an eine Port/Adressen-Kombination binden.

+0

das gab mir einen Gedanken, ich habe nicht genau das getan, aber ich könnte es getan haben, was bedeutet: wenn ich beginne Terminal und führen Sie das Skript zum ersten Mal nichts passiert, buchstäblich. Also, ich habe den Vorgang mit 'Crtl + Z' beendet und das Skript erneut ausgeführt, es hat geklappt (gab mir den Fehler) ist es möglich, dass der Prozess beim ersten ran noch an ist? Ich habe keine Ahnung, die Sache ist, egal wie lange ich warte, passiert nichts, wenn ich das Skript zum ersten Mal im Terminal starte. – Leonardo

+0

Auf einem Linux-System wird ctrl-z den Prozess in den Hintergrund schieben. Es läuft also wahrscheinlich noch. Überprüfen Sie mit dem Befehl ps. – TheMagicCow

+0

o ja, es läuft immer noch ... Ich bekomme es jetzt, dieser Teil des Problems gelöst, danke! Aber trotzdem kann ich das Skript nicht ausführen, es hängt einfach, irgendeine Idee darüber? – Leonardo

0

Scheint so, als ob auf diesen Ports eine andere Anwendung läuft.

können Sie versuchen, zu überprüfen, ob es eine andere App auf demselben Port hören mit:

netstat -ntlpu | grep 50000 
+0

'(Nicht alle Prozesse konnten identifiziert werden, nicht-interne Prozessinformationen werden nicht angezeigt, Sie müssten root sein, um alles zu sehen.) tcp 0 0 0.0.0.0:50000 0.0.0.0:* LISTEN 6735/Python ' Dies ist die Ausgabe. – Leonardo

+0

Versuchen Sie zu überprüfen, welcher Prozess PID 6735 ist, wenn Sie keinen Root-Zugriff haben, warum erhalten Sie keine Hilfe von sysadmin und überprüfen Sie, wie es funktioniert. – ajays20078