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.Any, serverListenPort);
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(buffer, 0, received);
Console.WriteLine(empfangen);
}
public void Recieve_Check_Main()
{
for (int cco = 1; cco <= SocketCounter; cco++)
{
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.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
socket.Connect(ep);
Thread.Sleep(1000);
string request = "Test String";
Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
Byte[] bytesReceived = new Byte[256];
socket.Send(bytesSent, bytesSent.Length, 0);
}
}
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






