110,536
社区成员
发帖
与我相关
我的任务
分享
//服务端
private Socket _sockSvr;
private const int _buffersize = 2048;
private DataStruct m_DpObj = null;//DataStruct 是个自定义的类
public class DataStruct
{
public Socket ClientSocket = null;
public string ID = string.Empty;
public byte[] RecvData = new byte[2048];
public int nReadBytesNums = 0;
}
public int Start()
{
StartListen();
_sockSvr.BeginAccept(new AsyncCallback(AcceptCallBack), _sockSvr);
return 1;
}
private void StartListen()
{
_sockSvr = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, Port);
_sockSvr.Bind(iep);
_sockSvr.Listen(10);
}
private void AcceptCallBack(IAsyncResult ar)
{
Socket handler = (Socket)ar.AsyncState;
Socket _clientSock = handler.EndAccept(ar);
m_DpObj = new DataStruct ();
m_DpObj.ClientSocket = _clientSock;
m_DpObj.ID = GetClientIp(_clientSock);
_clientSock.BeginReceive(m_DpObj.RecvData, 0, _buffersize, SocketFlags.None, new AsyncCallback(ReceiveData), m_DpObj);
_sockSvr.BeginAccept(new AsyncCallback(AcceptCallBack), _sockSvr);
}
private void ReceiveData(IAsyncResult ar)
{
DataStruct ds= ar.AsyncState as DataStruct ;
Socket tempsocket = ds.ClientSocket;
ds.nReadBytesNums = ds.ClientSocket.EndReceive(ar);
if (ds.nReadBytesNums > 0)
{
//流程处理,忽略
}
ds= new DataStruct ();
ds.ClientSocket = tempsocket;
tempsocket.BeginReceive(ds.RecvData, 0, _buffersize, SocketFlags.None, new AsyncCallback(ReceiveData), ds);
Thread.Sleep(5);
}