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); } } } }