Grund
Ich wollte einfach ein kleines Chat-Programm programmieren. Es ist nur ein Experiment und soll deshalb nicht weiter ausgebaut werden oder gar perfekt funktionieren, es soll nur zeigen wie ein Chat ohne Server funktionieren könnte.
Funktionsweise
Wie man sehen kann gibt es zwei parallele Threads, einmal den Sender und einmal den Empfänger, der Sender soll die geschriebenen Nachrichten versenden und der Empfänger soll immer ausschau nach Nachrichten halten. Der Einfachheit halber habe ich das ganze nur mit dem Protokoll UDP realisiert. beim starten des Programmes wird nach zwei IP-Adressen gefragt, dort werden die IP-Adressen der Emfänger eingetragen - in diesem Fall zwei -, wenn ich dort beispielsweise 127.0.0.1 eingebe, dann erhalte ich die Nachrichten selbst, dass ganze läuft über den Port 50000. Wenn nun drei PCs miteinander vernetzt werden, dann sollten die sich eigentlich gegenseitig Nachrichten schreiben können. Die geschriebene Nachricht wird dann an beide eingetragenen Adressen geschickt, so sollten 3 personen miteinander chatten können.
Problem
Nun habe ich das ganze unter Linux (Ubuntu 7.10) ausprobiert, zuerst habe ich meinen Desktop-PC und meinen Laptop an meinen Router geschlossen, beim Router die IP 50000 freigeschaltet und wollte das Programm testen, leider funktioniert es nicht, die Nachrichten kommen nicht an. Dann habe ich zwei PC mit einer Crossoverleiten miteinander verbunden um zu sehen ob es am Router lag, beide haben eine Statische IP bekommen aber auch hier kommen die Nachrichten nicht an.
Ich kann mir nur selbst Nachrichten schreiben, entweder gebe ich meine eigene IP an oder localhost, außerdem habe ich das ganze erst mit zwei PCs getestet, zu drei bin ich noch nicht gekommen da ja noch nicht einmal dies funktioniert hat.
Quellcode
Code: Alles auswählen
#!/usr/bin/env python
import socket, thread
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = [0, 0]
def sender():
while True:
nachricht = raw_input()
for i in range(2):
s.sendto(nachricht, (ip[i], 50000))
def empfaenger():
s.bind(("", 50000))
while True:
daten, addr = s.recvfrom(1024)
print "[%s] %s" % (addr[0], daten)
for i in range(2):
ip[i] = raw_input("%i. IP-Adresse: " % i)
try:
thread.start_new_thread(empfaenger, ())
thread.start_new_thread(sender, ())
while True:
pass
finally:
s.close()
LG JumpLink