http://blog.csdn.net/zhujunxxxxx/article/details/43573879
服務器端代碼是參考這篇帖子的。
我想要實現,按下按鈕,然後往所有當前連接上的客戶端發送數據。
但是從SocketAsyncEventArgsPool 對象池裡pop一個SocketAsyncEventArgs e,然後發送數據。
發送函數裡的Socket s = e.AcceptSocket會出現未實例化的錯誤。
發送函數如下
public void Send(SocketAsyncEventArgs e, byte[] data)
{
if (e.SocketError == SocketError.Success)
{
Socket s = e.AcceptSocket;
if (s.Connected)
{
Array.Copy(data, 0, e.Buffer, 0, data.Length);
if (!s.SendAsync(e))
{
ProcessSend(e);
}
else
{
CloseClientSocket(e);
}
}
}
}
這原因是什麼你
SocketAsyncEventArgs對象池並不會把連接上的客戶端對象存起來。
需要在客戶端第一次連接服務器時,將客戶端的Socket對象存起來。
主動發送數據時在取來給SocketAsyncEventArgs