を使用しています。ネットワーキングとC#の新機能です。私は複数の非同期クライアントが接続でき、各クライアント間でメッセージを送受信できる非同期単一サーバーを開発しようとしています。問題は私のサーバーで1つのクライアントにしか接続できません。私は複数のクライアントに接続するためにスレッドを使用していますが、動作しません。非同期シングルサーバ複数のクライアントがC#
私は.NET 4.5フレームワークを使用しています。
注:私はクライアントから何かを受け取ったときにStateObjectを使用します。また、私のサーバは、(もし私がthreadclient()メソッドを削除すると)1つのクライアントが接続されている場合にのみ動作します。
Server:
public class mainclass
{
public static void Main()
{
newTCPNetworkNode nn = new newTCPNetworkNode();
nn.Initialize();
nn.threadClient();
}
}
public class StateObject
{
public Socket workSocket = null;
public const int BufferSize = 100;
public byte[] buffer = new byte[BufferSize];
}
class newTCPNetworkNode
{
private IPAddress addr;
private IPEndPoint endpoint;
private TcpListener mListener;
public static ManualResetEvent allDone = new ManualResetEvent(false);
public Thread listenthread;
public void Initialize()
{
addr = IPAddress.Parse("127.0.0.1");
endpoint = new IPEndPoint(addr, 1234);
mListener = new TcpListener(endpoint);
mListener.Start();
}
public void threadClient()
{
listenthread = new Thread(new ThreadStart(Start));
listenthread.Start();
}
public override void Start()
{
Console.WriteLine("Starting TCP server");
try
{
while (true)
{
allDone.Reset();
mListener.BeginAcceptTcpClient(new AsyncCallback(OnClientConnected), mListener);
allDone.WaitOne();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public void OnClientConnected(IAsyncResult result)
{
allDone.Set();
TcpListener listener = (TcpListener)result.AsyncState;
Socket handler = listener.EndAcceptSocket(result);
StateObject state = new StateObject();
state.workSocket = handler;
try
{
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
OnClientConnected()メソッドを更新しました。新しいクライアントが接続されると、新しいクライアント用の新しいソケットを持つstateオブジェクトが呼び出されます。 –