C# Socket异步通讯客户端之发送数据

C# Socket异步通讯客户端之主程序:

[c-sharp] view plain copy print ?
  1. #publicstaticintMain(String[]args)
  2. #{
  3. #
  4. #IPAddressipAddress=IPAddress.Parse("192.168.1.104");
  5. #intport=20000;
  6. #IPEndPointremoteEP=newIPEndPoint(ipAddress,port);
  7. #
  8. #//生成一个TCP/IPsocket.
  9. #Socketclient=newSocket(AddressFamily.InterNetwork,
  10. #SocketType.Stream,ProtocolType.Tcp);
  11. #
  12. #//与目标终端连接.
  13. #client.BeginConnect(remoteEP,
  14. #newAsyncCallback(ConnectCallback),client);
  15. #//等待,直到连接程序完成。在ConnectCallback中适当位置有connecDone.Set()语句
  16. #connectDone.WaitOne();
  17. #
  18. #//发送数据到远程终端.
  19. #Send(client,"Thisisatest<EOF>");
  20. #sendDone.WaitOne();
  21. #
  22. #//接收返回数据.
  23. #Receive(client);
  24. #receiveDone.WaitOne();
  25. #
  26. #//Writetheresponsetotheconsole.
  27. #Console.WriteLine("Responsereceived:{0}",response);
  28. #
  29. #//Releasethesocket.
  30. #client.Shutdown(SocketShutdown.Both);
  31. #client.Close();
  32. #
  33. #return0;
  34. #

C# Socket异步通讯客户端之连接部分Callback:

[c-sharp] view plain copy print ?
  1. 1.privatestaticvoidConnectCallback(IAsyncResultar)
  2. 2.{
  3. 3.
  4. 4.//从state对象获取socket.
  5. 5.Socketclient=(Socket)ar.AsyncState;
  6. 6.
  7. 7.//完成连接.
  8. 8.client.EndConnect(ar);
  9. 9.
  10. 10.Console.WriteLine("Socketconnectedto{0}",
  11. 11.client.RemoteEndPoint.ToString());
  12. 12.
  13. 13.//连接已完成,主线程继续.
  14. 14.connectDone.Set();
  15. 15.}

C# Socket异步通讯客户端之数据接收:

[c-sharp] view plain copy print ?
  1. #privatestaticvoidReceive(Socketclient)
  2. #{
  3. #
  4. #//构造容器state.
  5. #StateObjectstate=newStateObject();
  6. #state.workSocket=client;
  7. #
  8. #//从远程目标接收数据.
  9. #client.BeginReceive(state.buffer,0,StateObject.BufferSize,0,
  10. #newAsyncCallback(ReceiveCallback),state);
  11. #
  12. #}
  13. #
  14. #privatestaticvoidReceiveCallback(IAsyncResultar)
  15. #{
  16. #
  17. #//从输入参数异步state对象中获取state和socket对象
  18. #StateObjectstate=(StateObject)ar.AsyncState;
  19. #Socketclient=state.workSocket;
  20. #
  21. #//从远程设备读取数据
  22. #intbytesRead=client.EndReceive(ar);
  23. #
  24. #if(bytesRead>0)
  25. #{
  26. #//有数据,存储.
  27. #state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,bytesRead));
  28. #
  29. #//继续读取.
  30. #client.BeginReceive(state.buffer,0,StateObject.BufferSize,0,
  31. #newAsyncCallback(ReceiveCallback),state);
  32. #}
  33. #else
  34. #{
  35. #//所有数据读取完毕.
  36. #if(state.sb.Length>1)
  37. #{
  38. #response=state.sb.ToString();
  39. #}
  40. #//所有数据读取完毕的指示信号.
  41. #receiveDone.Set();
  42. #}
  43. #
  44. #}

C# Socket异步通讯客户端之发送数据:

[c-sharp] view plain copy print ?
  1. 1.privatestaticvoidSend(Socketclient,Stringdata)
  2. 2.{
  3. 3.//格式转换.
  4. 4.byte[]byteData=Encoding.ASCII.GetBytes(data);
  5. 5.
  6. 6.//开始发送数据到远程设备.
  7. 7.client.BeginSend(byteData,0,byteData.Length,0,
  8. 8.newAsyncCallback(SendCallback),client);
  9. 9.}
  10. 10.
  11. 11.privatestaticvoidSendCallback(IAsyncResultar)
  12. 12.{
  13. 13.
  14. 14.//从state对象中获取socket
  15. 15.Socketclient=(Socket)ar.AsyncState;
  16. 16.
  17. 17.//完成数据发送.
  18. 18.intbytesSent=client.EndSend(ar);
  19. 19.Console.WriteLine("Sent{0}bytestoserver.",bytesSent);
  20. 20.
  21. 21.//指示数据已经发送完成,主线程继续.
  22. 22.sendDone.Set();
  23. 23.
  24. 24.}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值