Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 19:07

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C# Server-Konsolenanwendung

Discussion on C# Server-Konsolenanwendung within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
BLODDYKILL's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 51
Received Thanks: 5
C# Server-Konsolenanwendung

Hey Leut´s,
Hab mich jezt in lezter zeit mit C# beschäftigt(super Sprache wenn man sich erstmal von Autoit auf Objektorientiert umgestellt hat )

Viele tuts gelesen und bin schließlich in meinem Zielgebiet Serverprgrammierung gelandet ;P

Aus unterschiedlichen TCP Tutorials und der mdsn libary hab ich mir jezt folgendes zusammengebastelt:
PHP Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Security;
using System.Security.Permissions;
using System.Collections;



public class 
Program
    
{
        static 
void Main(string[] args)
        {
        
Server MainServer = new Server();
        
MainServer.main();
        
Thread MainListener = new Thread(MainServer.Run);
        
MainListener.Start();
        
Thread MainRecieve = new Thread(MainServer.Recieve_Check_Main);
        
MainRecieve.Start();
        
System.Console.WriteLine("Listening on port 10000");
        
Client client = new Client("127.0.0.1"10000);
        
Thread.Sleep(2000);
        
Client clients = new Client("127.0.0.1"10000);
        
Console.Read();
        
MainServer.RWork false;
        }
    }

public class 
Server 
{
    
int received;
    
Socket[] newSocket = new Socket[999];
    
byte[] buffer;
    
string empfangen;
    public 
int SocketCounter 0;
    const 
int serverListenPort 10000;
    public 
bool RWork true;
    
TcpListener listener = new TcpListener(IPAddress.AnyserverListenPort);
    public 
void main()
    {
       
listener.Start();

    }
    public 
void Run()
    {
        while (
RWork)
        {
            while (!
listener.Pending())
            {
                
Thread.Sleep(50);
                if (
RWork==false)
                    break;

            }
            if (
RWork == true)
            {
                
Socket newSocket2 listener.AcceptSocket();
                if (
newSocket2 != null)
                {
                    
SocketCounter++;
                    
newSocket[SocketCounter] = newSocket2;
                    
System.Console.WriteLine("Neue Client-Verbindung (" +
                    
"IP: " newSocket[SocketCounter].RemoteEndPoint ", " +
                    
"Port " + ((IPEndPoint)newSocket[SocketCounter].LocalEndPoint).Port.ToString() + ")");
                }
            }
        }
    }
    public 
void StopRun()
    {
        
RWork false;
    }
    public 
void Recieve_Check(Socket client)
    {

          
int maxBuffer=150;
          
buffer = new byte[maxBuffer];
          
received client.Receive(buffer);
          
UTF8Encoding encoding = new UTF8Encoding();
          
empfangen encoding.GetString(buffer0received);
          
Console.WriteLine(empfangen);          
    }
    public 
void Recieve_Check_Main()
    {
        for (
int cco 1cco <= SocketCountercco++)
        {
            
Recieve_Check(newSocket[cco]);
        }
    }
}

public class 
Client
    
{
        public 
Client(String Address,int port)
        {
                
Thread.Sleep(5000);
                
IPHostEntry hostInfo Dns.GetHostByName(Address);
                
System.Net.IPEndPoint ep = new System.Net.IPEndPoint(hostInfo.AddressList[0],port);
                
Socket socket = new Socket(AddressFamily.InterNetworkSocketType.StreamProtocolType.Tcp );
                
socket.Connect(ep);
                
Thread.Sleep(1000);
                
string request "Test String";
                
Byte[] bytesSent Encoding.ASCII.GetBytes(request);
                
Byte[] bytesReceived = new Byte[256];
                
socket.Send(bytesSentbytesSent.Length0); 

        }

Was machts,sollte es bis jezt?
main -->startet nur listener
Run/Stoprun-->eigener Threadprozess der Verbindungen in einem array abspeichert
RecieveCheck/R_C_Main-->sollte als thread gestartet werden und über Console.Writeline(recieve) empfangen daten ausgeben.
Client: connected mit Server , schickt nen kleinen Teststring.
Prob: Teststring wird nicht über Konsole ausgegeben

Weis wer warum? :>

Mfg Sevenby7
BLODDYKILL is offline  
Old 01/13/2011, 20:27   #2
 
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
PHP Code:
        for (int cco 1cco <= SocketCountercco++)
        { 
ist wahrscheinlich dein fehler.


€ sind sowiet ich es sehe sogar 2 fehler^^.
nkkk is offline  
Old 01/13/2011, 20:34   #3
 
BLODDYKILL's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 51
Received Thanks: 5
Quote:
Originally Posted by nkkk View Post
PHP Code:
        for (int cco 1cco <= SocketCountercco++)
        { 
ist wahrscheinlich dein fehler.


€ sind sowiet ich es sehe sogar 2 fehler^^.
"Wenn keine Daten zum Lesen zur Verfügung stehen, wird die Receive-Methode blockiert, bis Daten verfügbar sind. Wenn im nicht blockierenden Modus keine Daten im Protokollstapelpuffer vorhanden sind, wird die Receive-Methode sofort beendet und löst eine SocketException aus. Mit der Available-Eigenschaft können Sie bestimmen, ob Daten zum Lesen verfügbar sind. Wenn Available ungleich 0 (null) ist, führen Sie den Empfangsvorgang erneut aus. "

Socket.Recieve also block bis was an kommt...
denke mal wenn ich für jeden Client einen eigenen Thread eröffne löst es des Problem.
BLODDYKILL is offline  
Old 01/13/2011, 20:56   #4
 
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
????
habe ich irgendwp geasgt das
"Socket.Recieve" falsch ist?

wenn du den debugger beutzt kannst du das prob. auch selbst finden.

Ja jeden client in eigen eigenen thread öffnen macht auch sinn.
nkkk is offline  
Old 01/15/2011, 23:11   #5
 
elite*gold: 0
Join Date: Jan 2008
Posts: 113
Received Thanks: 31
Hau mal die ganzen Thread.Sleeps raus und pack deinen Client mal in eine separate Anwendung.

Dann kannste erstmal richtig testen.
hallamasch is offline  
Reply




All times are GMT +1. The time now is 19:08.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.