Seite 1 von 1

Chat - Server und Client zugleich - Hilfe

Verfasst: Montag 17. März 2008, 14:22
von JumpLink
Hallo liebe Freunde, ich bin froh ein solch schönes Forum wie dieses gefunden zu haben, ich habe nämlich ein kleines Problem.

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()
Hat jemand eine Idee? Liegt es vielleicht daran dass das Betriebssystem die Ports nicht frei gibt?

LG JumpLink

Verfasst: Montag 17. März 2008, 14:49
von Leonidas
Was sagt denn ``netstat -lun``?

Verfasst: Dienstag 18. März 2008, 11:24
von Y0Gi
Vermutlich willst du Multicast verwenden?

Verfasst: Dienstag 18. März 2008, 23:10
von JumpLink
Ja stimmt so in der Art, wäre nicht schlecht wenn du mir die Funktion dafür nennen kannst wenn es eine solche gibt. Ansonsten würde ich trotzdem gerne dieses Programm vernünftig zum laufen bekommen.

"netstat -lun" konnte ich nicht nicht testen, bisher nur an einem PC indem ich mir selbst Nachrichten geschrieben habe, dort wurde der Port 50000 angezeigt jedoch sonst nichts.

Verfasst: Mittwoch 19. März 2008, 00:25
von EyDu
JumpLink hat geschrieben:Ja stimmt so in der Art, wäre nicht schlecht wenn du mir die Funktion dafür nennen kannst wenn es eine solche gibt.
Das ist kein Python-Feature, sondern ein IP-Feature: Multicast.

Verfasst: Mittwoch 19. März 2008, 09:43
von Leonidas
JumpLink hat geschrieben:"netstat -lun" konnte ich nicht nicht testen, bisher nur an einem PC indem ich mir selbst Nachrichten geschrieben habe, dort wurde der Port 50000 angezeigt jedoch sonst nichts.
Das bringt mir nichts, das Port 50000 offen ist ist ja klar. Du musst schon sagen an welche IP das gebunden ist.

Verfasst: Mittwoch 19. März 2008, 11:45
von Y0Gi
Ich habe so ein Tool vor Urzeiten mal in Java angefangen, das bringt dich vielleicht auf die richtige Spur: Mucacha. Sourcecode ist im .jar-File enthalten.

Verfasst: Mittwoch 19. März 2008, 12:29
von JumpLink
Leonidas hat geschrieben:
JumpLink hat geschrieben:"netstat -lun" konnte ich nicht nicht testen, bisher nur an einem PC indem ich mir selbst Nachrichten geschrieben habe, dort wurde der Port 50000 angezeigt jedoch sonst nichts.
Das bringt mir nichts, das Port 50000 offen ist ist ja klar. Du musst schon sagen an welche IP das gebunden ist.
Damit das dort sonst nichts steht meinte ich dass:

Code: Alles auswählen

Proto Recv-Q Send-Q Local Address           Foreign Address         State    
[...]
udp        0      0 0.0.0.0:50000           0.0.0.0:*  
soll ich das ganze noch einmal testen indem ich zwei Notebooks direkt mit einer Lanleitung miteinander verbinde?

Danke für das Javaprogramm

Verfasst: Dienstag 8. April 2008, 07:00
von JumpLink
Danke an alle für die Antworten, ich habe es noch einmal probiert und musste feststellen, dass ich den Port für TCP statt für UDP freigegeben hatte. Das Programm funktioniert also so wie es ist.
Liebe Grüße, JumpLink