Autor Beitrag
MoBBer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37
Erhaltene Danke: 1



BeitragVerfasst: Mi 02.12.09 15:48 
Hallo zusammen,

ich habe mal wieder ein Problem. Ich habe eine Form auf den man einen Button anklicken kann um im Netzwerk zu spielen.
Dabei soll später einmal links eine Tabelle zu sehen sein mit Spieler, die im Netzwerk ebenfalls auf diesen Button gedrückt haben. Da komme ich auch schon zum Problem. Im Grunde müsste mein Programm ja einen Broadcast abschicken das ich im Netzwerk spielen möchte und gleichzeitig aber auch das Netzwerk abhöhren, wer noch alles im Netzwerk spielen möchte.

Funktioniert das überhaupt so oder liege ich komplett falsch?

Im Grunde habe ich Probleme damit meine eigene IP herauszufinden, ohne sie statisch hinzuschreiben, damit ich einen Broadcast in das jeweilige Netzwerk schicken kann.
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Mi 02.12.09 16:24 
user profile iconMoBBer hat folgendes geschrieben Zum zitierten Posting springen:

Im Grunde habe ich Probleme damit meine eigene IP herauszufinden

Das funktioniert recht einfach:
ausblenden C#-Quelltext
1:
System.Net.IPAddress[] ips = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList;[					
MoBBer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37
Erhaltene Danke: 1



BeitragVerfasst: Mi 02.12.09 17:40 
Danke das hat mich schon etwas weiter gebracht. Hab es nun so gemacht das ich einen TCPListener starte der auf Anforderungen von TCPClients über Port 49500 wartet.

Kann ich nun auf der Client-Seite irgendwie alle Server suchen, die in diesem Netzwerk über diesen Port hören?
MoBBer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37
Erhaltene Danke: 1



BeitragVerfasst: Fr 04.12.09 18:51 
Bin nun schon etwas weiter allerdings bin ich schon wieder auf ein Problem getroffen.
In diesem Codeteil läuft der Serverthread nicht mehr weiter.
Könnt ihr mir vielleicht sagen warum?

Server:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
class ServerThread
{
  public bool stop = false;
        public bool running = false;
        private TcpClient client = null;

        public ServerThread(TcpClient client)
        {
            this.client = client;
            Kommunikation();
        }

        public void Kommunikation()
        {
            this.running = true;

            StreamReader sr = new StreamReader(this.client.GetStream());

            Console.WriteLine("Verbunden mit Client {0}...", sr.ReadLine()); //hier gehts nicht weiter

            this.client.Close();
            this.running = false;
        }
}


Client:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
class Netzwerk
{
        private TcpClient client = new TcpClient();
        private Stream reinRaus;

        public void SpielBeitreten(string ip)
        {
            client.Connect(IPAddress.Parse(ip),49500);
            this.reinRaus = this.client.GetStream();
            Byte[] sendBytes = Encoding.ASCII.GetBytes(Dns.GetHostName() + ip);
            this.reinRaus.Write(sendBytes,0,sendBytes.Length);
        }
}
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 05.12.09 02:19 
Weshalb auf der einen Seite ein StreamReader, aber auf der anderen Seite kein StreamWriter? Dann dürfte dir auch auffallen, was ein passenderes Gegenstück zu ReadLine sein sollte.

_________________
>λ=
MoBBer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.12.09 10:30 
Hatte das so aus dem Beispiel auf MSDN (msdn.microsoft.com/d...brary/bb979208.aspx) übernommen.

Hab alles auf NetworkStream umgestellt mit Read und Write und nun funktioniert es. Allerdings glaube ich das Problem lag daran das ich im Konstruktor keinen Thread startete sondern einfach nur die Methode aufrief.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
        
public ServerThread(TcpClient client)      
{         
     this.client = client;           
     Kommunikation();     //keinen Thread gestartet
}


So sieht der Code jetzt bei mir aus

Server:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
    class ServerThread
    {
        public bool stop = false;
        public bool running = false;
        private TcpClient client = null;
        private NetworkStream ns;

        public ServerThread(TcpClient client)
        {
            this.client = client;
            new Thread(new ThreadStart(Kommunikation)).Start();

        }

        public void Kommunikation()
        {
            this.running = true;

            ns = this.client.GetStream();
            Byte[] sendBytes = new Byte[128];
            ns.Read(sendBytes, 0,128);
            string temp = Encoding.ASCII.GetString(sendBytes).Replace("\0","");

            Console.WriteLine("Verbunden mit Client {0}...",temp); 

            this.client.Close();
            this.running = false;
        }
    }



Client:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
    class Netzwerk
    {
        private TcpClient client = new TcpClient();
        private NetworkStream ns;

        public void SpielBeitreten(string ip)
        {
            client.Connect(IPAddress.Parse(ip),49500);
            this.ns = this.client.GetStream();

            Byte[] komBytes = new Byte[128];
            komBytes = Encoding.ASCII.GetBytes(Dns.GetHostName() +" "+ ip);
            this.ns.Write(komBytes, 0, komBytes.Length);
        }
    }


Danke für eure Hilfe