利用Socket实现服务器给客户端发送信息,客户端给服务端发送数据,服务端异步接收单个客户端数据(持续),服务端异步接收多个客户端数据(持续)。
实现效果如上
客户端代码
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace 客户端
{class Program{static void Main(string[] args){Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 88));byte[] data = new byte[1024];int count = clientSocket.Receive(data);string msg = Encoding.UTF8.GetString(data, 0, count);Console.WriteLine(msg);while (true){string s = Console.ReadLine();clientSocket.Send(Encoding.UTF8.GetBytes(s));}clientSocket.Close();}}
}
服务器端
using System;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace TCP服务端
{class Program{static void Main(string[] args){//单次访问// SingleNetWork();//异步接收,单个客户端持续访问// StartServerAsync();//异步接收,多个客户端持续访问StartServerAsync_Multi();Console.ReadKey();}static void SingleNetWork()//接收单个客户端一次访问{Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//本机Ip 127.0.0.1IPAddress ipAddress = IPAddress.Parse("127.0.0.1");IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 88);serverSocket.Bind(ipEndPoint);serverSocket.Listen(50);Socket clientSocket = serverSocket.Accept();//向客户端发送消息!string msg = "你好,客户端!";byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);clientSocket.Send(data);//接收客户端的数据byte[] dataBuffer = new byte[1024];int count = clientSocket.Receive(dataBuffer);string msgReceive = System.Text.Encoding.UTF8.GetString(dataBuffer, 0, count);Console.Write(msgReceive);Console.ReadKey();clientSocket.Close();serverSocket.Close();}static byte[] dataBuffer = new byte[1024];static void StartServerAsync()//异步接收,单个客户端持续访问{Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//本机Ip 127.0.0.1IPAddress ipAddress = IPAddress.Parse("127.0.0.1");IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 88);serverSocket.Bind(ipEndPoint);serverSocket.Listen(50);Socket clientSocket = serverSocket.Accept();//向客户端发送消息!string msg = "你好,客户端!";byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);clientSocket.Send(data);clientSocket.BeginReceive(dataBuffer, 0, 1024,SocketFlags.None, ReceiveCallBack, clientSocket);}static void ReceiveCallBack(IAsyncResult ar){Socket clientSocket = ar.AsyncState as Socket;int count = clientSocket.EndReceive(ar);string msg = Encoding.UTF8.GetString(dataBuffer, 0, count);Console.WriteLine(msg);clientSocket.BeginReceive(dataBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);}static void StartServerAsync_Multi()//异步接收,多个客户端持续访问{Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//本机Ip 127.0.0.1IPAddress ipAddress = IPAddress.Parse("127.0.0.1");IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 88);serverSocket.Bind(ipEndPoint);serverSocket.Listen(50);serverSocket.BeginAccept(AcceptCallBack, serverSocket);}static void AcceptCallBack(IAsyncResult ar){Socket serverSocket = ar.AsyncState as Socket;Socket clientSocket = serverSocket.EndAccept(ar);string msg = "你好,客户端!";byte[] data = Encoding.UTF8.GetBytes(msg);clientSocket.Send(data);clientSocket.BeginReceive(dataBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);serverSocket.BeginAccept(AcceptCallBack, serverSocket);}}}