C# socket异步通信实现

public static int Main(String[] args)
{

IPAddress ipAddress = IPAddress.Parse(“192.168.1.104”);
int port = 20000;
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
// 生成一个TCP/IP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// 与目标终端连接.
connectDone.Reset();
client.BeginConnect(remoteEP,
new AsyncCallback(ConnectCallback), client);
//等待,直到连接程序完成。在ConnectCallback中适当位置有connecDone.Set()语句
connectDone.WaitOne();
.// 发送数据到远程终端.
19.Send(client, “This is a test”);
20.sendDone.WaitOne();
21.
22.// 接收返回数据.
23.Receive(client);
24.receiveDone.WaitOne();
25.
26.// Write the response to the console.
27.Console.WriteLine(“Response received : {0}”, response);
28.
29.// Release the socket.
30.client.Shutdown(SocketShutdown.Both);
31.client.Close();
32.
33.return 0;
34.
35.}
C# Socket异步通讯客户端之连接部分Callback:
1.private static void ConnectCallback(IAsyncResult ar)
2.{
3.
4.// 从state对象获取socket.
5.Socket client = (Socket)ar.AsyncState;
6.
7.// 完成连接.
8.client.EndConnect(ar);
9.
10.Console.WriteLine(“Socket connected to {0}”,
11.client.RemoteEndPoint.ToString());
12.
13.// 连接已完成,主线程继续.
14.connectDone.Set();
15.}
C# Socket异步通讯客户端之数据接收:
1. private static void Receive(Socket client)
2.{
3.
4.// 构造容器state.
5.StateObject state = new StateObject();
6.state.workSocket = client;
7.
8.// 从远程目标接收数据.
9.client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
10.new AsyncCallback(ReceiveCallback), state);
11.
12.}
13.
14.private static void ReceiveCallback(IAsyncResult ar)
15.{
16.
17.// 从输入参数异步state对象中获取state和socket对象
18.StateObject state = (StateObject)ar.AsyncState;
19.Socket client = state.workSocket;
20.
21.//从远程设备读取数据
22.int bytesRead = 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.new AsyncCallback(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异步通讯客户端之发送数据:
1.private static void Send(Socket client, String data)
2.{
3.// 格式转换.
4.byte[] byteData = Encoding.ASCII.GetBytes(data);
5.
6.// 开始发送数据到远程设备.
7.client.BeginSend(byteData, 0, byteData.Length, 0,
8.new AsyncCallback(SendCallback), client);
9.}
10.
11.private static void SendCallback(IAsyncResult ar)
12.{
13.
14.// 从state对象中获取socket
15.Socket client = (Socket)ar.AsyncState;
16.
17.// 完成数据发送.
18.int bytesSent = client.EndSend(ar);
19.Console.WriteLine(“Sent {0} bytes to server.”, bytesSent);
20.
21.// 指示数据已经发送完成,主线程继续.
22.sendDone.Set();
23.
24.}
C# Socket异步通讯客户端的实现源码内容就基本向你介绍到这里,希望对你了解和学习C# Socket异步通讯有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值