代码没能实现,仅收藏供后期学习备用:
服务器端:
static void StartServerAyync()
{
//tcp数据流方式,流模式
//创建服务器套接字
Socket serverSocker = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//IP地址
IPAddress iPAddress = IPAddress.Parse("192.168.96.89");
//端口号
IPEndPoint Point = new IPEndPoint(iPAddress, 8888);
//绑定IP地址和端口号
serverSocker.Bind(Point);
//开始监听端口号,监听不超过10个
serverSocker.Listen(10);
//异步接收客户端的连接
serverSocker.BeginAccept(AcceptCallBack, serverSocker);
}
//异步等待客户端连接的回调函数
static void AcceptCallBack(IAsyncResult ar)
{
//clientCount++;
//Console.WriteLine("一个客户端连接上了本服务器,当前连接的客户端数:" /*+ clientCount*/);
Socket serverSocket = ar.AsyncState as Socket;
Socket clientSocket = serverSocket.EndAccept(ar);
//向客户端发送数据
string msgSend = "hello word";
byte[] sendBuffer = Encoding.ASCII.GetBytes(msgSend);
//接收客户端数据
clientSocket.BeginReceive(receiveBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);
//继续异步接收客户端的连接
serverSocket.BeginAccept(AcceptCallBack, serverSocket);
}
//异步接收客户端数据的回调函数
static void ReceiveCallBack(IAsyncResult ar)
{
Socket clientSocket = null;
try
{
clientSocket = ar.AsyncState as Socket;
int count = clientSocket.EndReceive(ar);
if (count==0)
{
//clientCount--;
Console.WriteLine("一个客户端关闭了连接,当前连接的客户端数" /*+ clientCount*/);
if (clientSocket!=null)
{
clientSocket.Close();
}
return;
}
string msgReceive = Encoding.UTF8.GetString(receiveBuffer, 0, count);
Console.WriteLine("客户端消息" + msgReceive);
clientSocket.BeginReceive(receiveBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);
}
catch (Exception)
{
//clientCount--;
Console.WriteLine("一个客户端关闭了连接,当前客户端数" /*+ clientCount*/);
if (clientSocket!=null)
{
clientSocket.Close();
}
}
}
客户端:
static void Main(string[] args)
{
//创建客户端套接字
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//与服务器进行连接
clientSocket.Connect(new IPEndPoint(IPAddress.Parse("192.168.96.89"),8888));
//接收从服务器端发送过来的消息
byte[] dataReceive = new byte[1024];
int count = clientSocket.Receive(dataReceive);
string msgReceive = Encoding.ASCII.GetString(dataReceive, 0, count);
Console.WriteLine(msgReceive);
string str = Console.ReadLine();
//向服务器端发送一条消息
while (true)
{
byte[] dataSend = Encoding.UTF8.GetBytes(str);
clientSocket.Send(dataSend);
str = Console.ReadLine();
if (str.Equals("exit"))
{
break;
}
}
clientSocket.Close();
Console.ReadLine();
}