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



BeitragVerfasst: So 08.06.08 15:35 
hallo, hab diesen Quellcode aus einem Tutorial zu meinen Zwecken modifieziert, leider gibts jetzt ein größeres Problem und ich weis nicht warum, woran liegt?
Das ganze ist eine Consolen Anwendung

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:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
static void Main(string[] args)
        {
            Thread start = new Thread(new ThreadStart(ChatServer)); //Hier leigt das Problem :
//Folgende Fehlermeldung
//Fehler  1  Für das nicht statische Feld, die Methode oder die Eigenschaft //"ConsoleApplication1.Program.ChatServer()" ist ein Objektverweis erforderlich.  D:\info\Thread1\ConsoleApplication1\ConsoleApplication1\Program.cs  26  39  ConsoleApplication1

            start.Start();
        }

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

        private void ServiceClient()
        {
            Socket client = clientsocket;
            bool keepalive = true;
            while (keepalive)
            {
                Byte[] buffer = new Byte[1024];
                client.Receive(buffer);
                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);
                }
                if (tokens[0] == "CHAT")
                {
                    for (int n = 0; n < clients.Count; n++)
                    {
                        Client cl = (Client)clients[n];
                        SendToClient(cl, clientcommand);
                    }
                }
                if (tokens[0] == "PRIV")
                {
                    string destclient = tokens[3];
                    for (int n = 0; n < clients.Count; n++)
                    {
                        Client cl = (Client)clients[n];
                        if (cl.Name.CompareTo(tokens[3]) == 0)
                            SendToClient(cl, clientcommand);
                        if (cl.Name.CompareTo(tokens[1]) == 0)
                            SendToClient(cl, clientcommand);
                    }
                }
                if (tokens[0] == "GONE")
                {
                    int remove = 0;
                    bool found = false;
                    int c = clients.Count;
                    for (int n = 0; n < c; n++)
                    {
                        Client cl = (Client)clients[n];
                        SendToClient(cl, clientcommand);
                        if (cl.Name.CompareTo(tokens[1]) == 0)
                        {
                            remove = n;
                            found = true;
                         
                        }
                    }
                    if (found)
                        clients.RemoveAt(remove);
                    client.Close();
                    keepalive = false;
                }
            }
        }

        public class Client
        {
            private Thread clthread;
            private EndPoint endpoint;
            private string name;
            private Socket sock;
            public Client(string _name, EndPoint _endpoint, Thread _thread, Socket _sock)
            {
                clthread = _thread;
                endpoint = _endpoint;
                name = _name;
                sock = _sock;
            }
            public override string ToString()
            {
                return endpoint.ToString() + " : " + name;
            }
            public Thread CLThread
            {
                get { return clthread; }
                set { clthread = value; }
            }
            public EndPoint Host
            {
                get { return endpoint; }
                set { endpoint = value; }
            }
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            public Socket Sock
            {
                get { return sock; }
                set { sock = value; }
            }
        }

        private void StartListening()
        {
            listener = new TcpListener(IPAddress.Any, listenport);
            listener.Start();
            while (true)
            {
                try
                {
                    Socket s = listener.AcceptSocket();
                    clientsocket = s;
                    clientservice = new Thread(new ThreadStart(ServiceClient));
                    clientservice.Start();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
            }
        }


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 08.06.08 15:53 
Hallo und :welcome:!

Die Main-Methode ist statisch, deine anderen Methoden sind das nicht, daher bekomsmt Du den Fehler.

Grüße
Christian

_________________
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: So 08.06.08 21:36 
Danke für die hilfe nun gehts, aber ich bekomm einfache keine verbindung zum server:
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:
        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:
[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);
                }
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 08.06.08 21:44 
Hallo!

Bitte erstelle für neue Fragen auch immer neue Threads. Dann kannst Du sie in der richtigen Sparte im Forum platzieren und einen Titel geben, der zum Inhalt passt. Danke! :)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.