C# Socket异步通讯客户端之主程序:
- #publicstaticintMain(String[]args)
- #{
- #
- #IPAddressipAddress=IPAddress.Parse("192.168.1.104");
- #intport=20000;
- #IPEndPointremoteEP=newIPEndPoint(ipAddress,port);
- #
- #//生成一个TCP/IPsocket.
- #Socketclient=newSocket(AddressFamily.InterNetwork,
- #SocketType.Stream,ProtocolType.Tcp);
- #
- #//与目标终端连接.
- #client.BeginConnect(remoteEP,
- #newAsyncCallback(ConnectCallback),client);
- #//等待,直到连接程序完成。在ConnectCallback中适当位置有connecDone.Set()语句
- #connectDone.WaitOne();
- #
- #//发送数据到远程终端.
- #Send(client,"Thisisatest<EOF>");
- #sendDone.WaitOne();
- #
- #//接收返回数据.
- #Receive(client);
- #receiveDone.WaitOne();
- #
- #//Writetheresponsetotheconsole.
- #Console.WriteLine("Responsereceived:{0}",response);
- #
- #//Releasethesocket.
- #client.Shutdown(SocketShutdown.Both);
- #client.Close();
- #
- #return0;
- #
C# Socket异步通讯客户端之连接部分Callback:
- 1.privatestaticvoidConnectCallback(IAsyncResultar)
- 2.{
- 3.
- 4.//从state对象获取socket.
- 5.Socketclient=(Socket)ar.AsyncState;
- 6.
- 7.//完成连接.
- 8.client.EndConnect(ar);
- 9.
- 10.Console.WriteLine("Socketconnectedto{0}",
- 11.client.RemoteEndPoint.ToString());
- 12.
- 13.//连接已完成,主线程继续.
- 14.connectDone.Set();
- 15.}
C# Socket异步通讯客户端之数据接收:
- #privatestaticvoidReceive(Socketclient)
- #{
- #
- #//构造容器state.
- #StateObjectstate=newStateObject();
- #state.workSocket=client;
- #
- #//从远程目标接收数据.
- #client.BeginReceive(state.buffer,0,StateObject.BufferSize,0,
- #newAsyncCallback(ReceiveCallback),state);
- #
- #}
- #
- #privatestaticvoidReceiveCallback(IAsyncResultar)
- #{
- #
- #//从输入参数异步state对象中获取state和socket对象
- #StateObjectstate=(StateObject)ar.AsyncState;
- #Socketclient=state.workSocket;
- #
- #//从远程设备读取数据
- #intbytesRead=client.EndReceive(ar);
- #
- #if(bytesRead>0)
- #{
- #//有数据,存储.
- #state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,bytesRead));
- #
- #//继续读取.
- #client.BeginReceive(state.buffer,0,StateObject.BufferSize,0,
- #newAsyncCallback(ReceiveCallback),state);
- #}
- #else
- #{
- #//所有数据读取完毕.
- #if(state.sb.Length>1)
- #{
- #response=state.sb.ToString();
- #}
- #//所有数据读取完毕的指示信号.
- #receiveDone.Set();
- #}
- #
- #}
C# Socket异步通讯客户端之发送数据:
- 1.privatestaticvoidSend(Socketclient,Stringdata)
- 2.{
- 3.//格式转换.
- 4.byte[]byteData=Encoding.ASCII.GetBytes(data);
- 5.
- 6.//开始发送数据到远程设备.
- 7.client.BeginSend(byteData,0,byteData.Length,0,
- 8.newAsyncCallback(SendCallback),client);
- 9.}
- 10.
- 11.privatestaticvoidSendCallback(IAsyncResultar)
- 12.{
- 13.
- 14.//从state对象中获取socket
- 15.Socketclient=(Socket)ar.AsyncState;
- 16.
- 17.//完成数据发送.
- 18.intbytesSent=client.EndSend(ar);
- 19.Console.WriteLine("Sent{0}bytestoserver.",bytesSent);
- 20.
- 21.//指示数据已经发送完成,主线程继续.
- 22.sendDone.Set();
- 23.
- 24.}