В моем проекте я использую Asynchronous Socket Server, как показано ниже.
for (int i = 0; i < localip.Length; i++)
{
try
{
m_mainSocket[1] = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
m_mainSocket[1].Bind(new IPEndPoint(localip[i], port));
m_mainSocket[1].Listen(1000);
m_mainSocket[1].BeginAccept(new AsyncCallback(OnClientConnect2), m_mainSocket[1]);
Log.updateErrorlog(localip[i].ToString()+" Port : "+port);
}
catch
{ }
}
public void OnClientConnect2(IAsyncResult ar)
{
Socket listener2 = (Socket)ar.AsyncState;
try
{
NewConnection2(listener2.EndAccept(ar));
listener2.BeginAccept(new AsyncCallback(OnClientConnect2), listener2);
}
catch
{
listener2.Close();
}
}
public void NewConnection2(Socket sockClient)
{
SocketChatClient client2 = new SocketChatClient(sockClient);
//m_aryClients.Add(client2);
client2.SetupRecieveCallback2(this);
if (!InvokeRequired)
{
}
else
{
}
}
public void WaitForData(System.Net.Sockets.Socket soc)
{
SocketChatClient client2 = new SocketChatClient(soc);
client2.SetupRecieveCallback2(this);
}
public void OnDataReceived(IAsyncResult ar)
{
SocketChatClient client = (SocketChatClient)ar.AsyncState;
byte[] aryRet = client.GetRecievedData(ar);
string mdz3 = "";
mdz3 = System.Text.Encoding.ASCII.GetString(aryRet, 0, aryRet.Length);
if (aryRet.Length < 1)
{
client.Sock.Close();
return;
}
messageReceived msend = new messageReceived(mdz3, aryRet, client.Sock);
msend.msg_thread.Start();
msend.msg_thread.Join();
client.SetupRecieveCallback2(this);
}
И ниже мое сообщение Получено .cs класс.
public Thread s_thread;
private string RecvData;
private Random RNo = new Random();
private Socket ClientSocket;
public MsgThread(byte[] aryRecvData,Socket _ClientSocket)
{
RecvData = System.Text.Encoding.ASCII.GetString(aryRecvData,0,aryRecvData.Length);
ClientSocket = _ClientSocket;
s_thread = new Thread(new ThreadStart(ProcessThread));
}
private void MsgThreadProcess()
{
lock (this)
{
string[] msg = RecvData.Split('|');
Process(msg);
}
}
Когда я получаю первое сообщение сокета, я хочу подождать еще 5 секунд для второго сообщения сокета и обработать два сообщения. Если я не получу ничего в течение 5 секунд, я продолжу обработку первого. Пожалуйста, порекомендуйте. Спасибо.