System.Net.Socket 异步实现
来源:互联网 发布:美联储加息概率数据 编辑:程序博客网 时间:2024/05/29 03:15
TCPServer
1、使用的通讯通道:socket
2、用到的基本功能:
Bind, Listen,BeginAccept,EndAccept,BeginReceive,EndReceive
3、函数参数说明
Socket listener = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
新建socket所使用的参数均为系统预定义的量,直接选取使用。
listener.Bind(localEndPoint);
localEndPoint 表示一个定义完整的终端,包括IP和端口信息。
new IPEndPoint(IPAddress,port)
IPAdress.Parse("192.168.1.3")
listener.Listen(100);
监听
listener.BeginAccept(new AsyncCallback(AcceptCallback),listener);
AsyncCallback(AcceptCallback),一旦连接上后的回调函数为AcceptCallback。当系统调用这个函数时,自动赋予的输入参数为IAsyncResoult类型变量ar。
listener,连接行为的容器。
Socket handler = listener.EndAccept(ar);
完成连接,返回此时的socket通道。
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,new AsyncCallback(ReadCallback), state);
接收的字节,0,字节长度,0,接收时调用的回调函数,接收行为的容器。
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; namespace CSocketServer { public class SocketObject { public Socket CSocket = null; public const int BufferSize = 8; public byte[] Buffer = new byte[BufferSize]; public StringBuilder DataBuilder = new StringBuilder(); } class Program { static void Main(string[] args) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint point = new IPEndPoint(IPAddress.Any, 55000); socket.Bind(point); socket.Listen(100); Console.WriteLine("Waiting For Client Connect..."); socket.BeginAccept(new AsyncCallback(AcceptCallBack), socket); Console.Read(); } static void AcceptCallBack(IAsyncResult ar) { Socket socket = (Socket)ar.AsyncState; Socket handler = socket.EndAccept(ar); socket.BeginAccept(new AsyncCallback(AcceptCallBack), socket); SocketObject obj = new SocketObject(); obj.CSocket = handler; handler.BeginReceive(obj.Buffer, 0, SocketObject.BufferSize, SocketFlags.None, new AsyncCallback(ReceiveCallBack), obj); } static void ReceiveCallBack(IAsyncResult ar) { SocketObject obj = (SocketObject)ar.AsyncState; Socket socket = obj.CSocket; int bytesRead = socket.EndReceive(ar); string data = string.Empty; if (bytesRead > 0) { obj.DataBuilder.Append(Encoding.Default.GetString(obj.Buffer, 0, bytesRead)); socket.BeginReceive(obj.Buffer, 0, SocketObject.BufferSize, SocketFlags.None, new AsyncCallback(ReceiveCallBack), obj); } else { File.WriteAllText(string.Format(@"D:\{0}.txt", DateTime.Now.ToString("MMddHHmmssfff")), obj.DataBuilder.ToString()); // Console.WriteLine(obj.DataBuilder.ToString()); Console.WriteLine("Received {0} Bytes Data...", Encoding.Default.GetBytes(obj.DataBuilder.ToString()).Length); } } } }
- System.Net.Socket 异步实现
- 异步Socket (.net)
- .net中的socket异步通信实现--服务器端代码
- .net中的socket异步通信实现--客户端代码
- .NET Socket开发之异步Socket
- .NET Socket开发之异步Socket
- .NET Socket开发之异步Socket
- .NET Socket开发中的异步Socket
- NET Socket开发之异步Socket
- .NET Socket开发之异步Socket
- .NET Socket开发之异步Socket
- Asp.NET Socket开发之异步Socket
- .NET Socket开发之异步Socket
- .NET Socket开发之异步Socket
- C# socket异步通信实现
- c# socket 客户端异步实现
- .NET关于同步、异步及Socket
- .NET关于同步、异步及Socket
- 1. struts上传:界面
- nohup命令详解
- SSH本机需要输入密码问题
- 从SharePoint 2010网站上导出list的方法
- Java播放声音的几种方式
- System.Net.Socket 异步实现
- HTTP协议中PUT和POST使用上的区别
- 2. struts上传:ActionForm
- Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied: user=D
- 3. struts上传:Action
- 所谓自己的路
- AndroidManifest.xml file missing 解决方案
- W5100E01-AVR是什么?怎么用?(三)(用户手册V1.0版)
- pl/sql基本语句