Autor Beitrag
nut2
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 08.06.08 21:51 
Ich habe vor ein Consolen Chat Programm zuschreiben, dazu hab einen vorhanden Quellcode modifizert
dier Listener nimmt die eingehenden Verbindungen ann und dann wird jede Client in einem eigenen Thread verwaltet
leider bekomme ich keine verbing zum Listener;
Hab nicht die geringste Ahnung woran es liegen kann ( firewall ist aus);
Client Seite:
ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
  
        private bool connected = false;
         private string clientname1;
        private int serverport=45678;
        private NetworkStream ns;
        private StreamReader sr;
        private TcpClient clientsocket;
        private Thread receive = null;
        private string serveraddress="127.0.0.1";

        static void Main(string[] args)
        {
           SharKet neueInstanz1 = new SharKet();
           neueInstanz1.EstablishConnection(); ;
            
             
           SharKet neueInstanz2 = new SharKet();
           neueInstanz2.RegisterWithServer();
           SharKet neueInstanz3 = new SharKet();
           neueInstanz3.ReceiveChat();
         }

        private void EstablishConnection()
        {
          
            
                Console.WriteLine("Connecting to Server");
                try
                {
                    clientsocket = new TcpClient(serveraddress, serverport);
                    ns = clientsocket.GetStream();
                    sr = new StreamReader(ns);
                    connected = true;
              

                }
                catch (Exception )
                {

                    Console.WriteLine("Could not connect to Server Error");

                    Console.WriteLine("Disconnected");
                }
            
          
        }

        private void RegisterWithServer()
        {  // hier ist die verbindung dann weg
            if (connected==true)
            {
                try
                {
                    Console.WriteLine("Name Eingeben");
                    string clientname = Console.ReadLine();
                    clientname1 = clientname;
                    string command = "CONN|" + clientname;
                    Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray());


                    ns.Write(outbytes, 0, outbytes.Length); // hier liegt fehler//
                    string serverresponse = sr.ReadLine();
                  
                    serverresponse.Trim(); // entfernt leerzeichen am anfang und ende//
                    string[] tokens = serverresponse.Split(new Char[] { '|' });
                    if (tokens[0] == "LIST")
                    {
                        Console.WriteLine("Connected");
                        // btnDisconnect.Enabled = true;
                    }
                    for (int n = 1; n < tokens.Length - 1; n++)
                        Console.WriteLine(tokens[n].Trim(new char[] { '\r''\n' }));
                    Console.WriteLine(clientname + ": Connected to Chat Server");
                }
                catch (Exception)
                {
                    Console.WriteLine("Error Registering");

                }
            }
            else { Console.WriteLine("Keine verbindung zum Server"); }
        }


Server seitig:
ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
  
[list=1][*]
        private int listenport = 45678;
        private TcpListener listener;

        private ArrayList clients;
       
        private Socket clientsocket;
        private Thread clientservice;

        static void Main(string[] args)
        { // notwendig um mit einer statischen ein nicht statische Methode aufzurufen
            SharKet neuInstanz = new SharKet();
            neuInstanz.ChatServer();
        }

     private void ChatServer()
    {    
      
      clients = new ArrayList();
      Thread processor = new Thread(new ThreadStart(StartListening));
      processor.Start();
            
    }

     private void StartListening()
        {
            listener = new TcpListener(IPAddress.Any, listenport);
            listener.Start();
            Console.WriteLine("Servergestarted");
            while (true)
            {
                try
                {
                    Socket s = listener.AcceptSocket();
                    //while (!listener.Pending()) { Thread.Sleep(200); }
                    //TcpListener.Pending gibt erst "true" zurück, wenn eine neue Verbindung anliegt.
                    clientsocket = s;
                    clientservice = new Thread(new ThreadStart(ServiceClient));
                    clientservice.Start();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
            }
        }
        private void ServiceClient()
        {
            Socket client = clientsocket;
            bool keepalive = true;
            while (keepalive)
            {
                Byte[] buffer = new Byte[1024];
                client.Receive(buffer); // natürlich gibts hier eine exception da die verbindung weg ist//
                string clientcommand = System.Text.Encoding.ASCII.GetString(buffer);
                
                string[] tokens = clientcommand.Split(new Char[] { '|' });
                Console.WriteLine(clientcommand);
                if (tokens[0] == "CONN")
                {
                    for (int n = 0; n < clients.Count; n++)
                    {
                        Client cl = (Client)clients[n];
                        SendToClient(cl, "JOIN|" + tokens[1]);
                    }
                    EndPoint ep = client.RemoteEndPoint;
                    Client c = new Client(tokens[1], ep, clientservice, client);
                    clients.Add(c);
                    string message = "LIST|" + GetChatterList() + "\r\n";
                    SendToClient(c, message);
                 //   lbClients.Items.Add(c);
                }



Moderiert von user profile iconChristian S.: Topic aus Netzwerk verschoben am So 08.06.2008 um 22:00
nut2 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 09.06.08 22:34 
Hab den Fehler in de Zwischenzeit gefunden
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 09.06.08 22:56 
Dann sag doch bitte auch, wo er lag.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
nut2 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 11.06.08 23:47 
Da ich Registerwithserver und RecieveChat nach einander aufgerufen habe anstatt am ende der vorhergehen funktion
war die Verbindung zum server bereits wieder geschlossen