项目创建选项,C#控制台应用程序
需要引用
using System.Net.Scokets;
using System.Net;
创建服务器端Socket
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");//注册ip
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1121);//ip绑定端口
serverSocket.Bind(ipEndPoint);//关联起来
serverSocket.Listen(0);//处理连接的队列,0代表无限制
为了测试新建一个控制台应用作为客户端
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1121);
clientSocket.Connect(ipEndPoint);//建立与远程主机的连接
初级测试:
服务器端给客户端发送消息
Socket clientSocket= serverSocket.Accept();//接收一个客户端连接.如果监听到客户端,才继续执行
clientSocket.Send(System.Text.Encoding.UTF8.GetBytes("Hello client.你好。。。"));
服务器端接收客户端发送过来的消息
byte[] dataBuffer = new byte[1024];
int count= clientSocket.Receive(dataBuffer);
string msgReceive = System.Text.Encoding.UTF8.GetString(dataBuffer,0,count);
Console.WriteLine(msgReceive);
高级版:
关键字异步
BeginAccept EndAccept
BeginReceive EndReceive
//异步发送
serverSocket.BeginAccept(AcceptAsyncCallback, serverSocket);
static byte[] dataBuffer = new byte[1024];
start void AcceptAsyncCallback(IAsyncResult ar)
{
Socket mServerSocket = ar.AsyncState as Socket;
Socket mClientSocket= mServerSocket.EndAccept(ar);
//发送消息
mClientSocket.Send(System.Text.Encoding.UTF8.GetBytes("Hi client.你好。。。"));
//异步接收消息
mClientSocket.BeginReceive(dataBuffer, 0, dataBuffer.Length, SocketFlags.None, asyncCallback, mClientSocket);
mServerSocket.BeginAccept(AcceptAsyncCallback, mServerSocket);
}
start void asyncCallback(IAsyncResult ar)
{
Socket mClientSocket = null;
try
{
mClientSocket = ar.AsyncState as Socket;
int count = mClientSocket.EndReceive(ar);
if (count==0)
{
mClientSocket.Close();
return;
}
Console.WriteLine("接收消息:" + System.Text.Encoding.UTF8.GetString(dataBuffer, 0, count));
mClientSocket.BeginReceive(dataBuffer, 0, dataBuffer.Length, SocketFlags.None, asyncCallback, mClientSocket);
}
catch (Exception)
{
Console.WriteLine("一个远程主机强迫下线了");
if (mClientSocket!=null)
{
mClientSocket.Close();
}
}
}