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