Итак, я попробовал следующую программу, чтобы сделать асинхронный сервер, когда его синхронизация проста, и я могу говорить только с сервером с 1 соединением, потому что второе не разрешено.Я делаю класс Server.cs с моей серверной реализацией.Для клиники я использую Microsoft Telnet.
Program.cs:
static void Main(string[] args)
{
Server myServer = new Server();
myServer.StartListening();
Console.ReadKey();
}
Server.cs
class Server
{
//Delegates
delegate void socketConnection();
socketConnection myConnection;
//Needed for connections
public IPEndPoint serverIPEP { get; set; }
public Socket serverSocket { get; set; }
public int numberOfConnections { get; set; }
public List<Socket> activeConnections;
//Constructors
public Server()
{
serverIPEP = new IPEndPoint(IPAddress.Any, 9080);
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
numberOfConnections = 10;
activeConnections = new List<Socket>(numberOfConnections);
}
public Server(IPEndPoint serverIPEP)
{
this.serverIPEP = serverIPEP;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
numberOfConnections = 10;
activeConnections = new List<Socket>(numberOfConnections);
}
public Server(Socket serverSocket)
{
serverIPEP = new IPEndPoint(IPAddress.Any, 9080);
this.serverSocket = serverSocket;
numberOfConnections = 10;
activeConnections = new List<Socket>(numberOfConnections);
}
public Server(IPEndPoint serverIPEP, Socket serverSocket, int numberOfConnections)
{
this.serverIPEP = serverIPEP;
this.serverSocket = serverSocket;
this.numberOfConnections = numberOfConnections;
activeConnections = new List<Socket>(numberOfConnections);
}
public void StartListening()
{
serverSocket.Bind(serverIPEP);
serverSocket.Listen(numberOfConnections);
Console.WriteLine("Waiting for connections...");
//Here I made a loop with the callback :) I don't think its the cleverest implementation
myConnection = new socketConnection(GetConnections);
IAsyncResult connectionResult = myConnection.BeginInvoke(callBack, this);
//connectionResult.AsyncWaitHandle.WaitOne();
}
private void GetConnections()
{
Socket clientSocket = serverSocket.Accept();
activeConnections.Add(clientSocket);
}
private void callBack(IAsyncResult itfAR)
{
Console.WriteLine("Current thread: " + System.Threading.Thread.CurrentThread.ManagedThreadId);
myConnection.BeginInvoke(callBack, this);
}
Проблема заключается в том, что при подключении к 2 клиентамговорит мне, что они находятся в одном потоке, и я хочу, чтобы они были в отдельных потоках.Он говорит мне:
Waiting for connections...
Current thread: 7
Current thread: 7
Разве не должно быть другого числа, такого как нить 7, а затем нить 9?Или так происходит, потому что я подключаюсь к серверу с того же компьютера?