实现多客户端向服务器发送数据
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Net; using System.Net.Sockets; namespace MyAsyncServer { class Program { private static byte[] byteData = new byte[1024]; static void Main(string[] args) { startListen(); } public static ManualResetEvent connEvent = new ManualResetEvent(false); public static ManualResetEvent receiveEvent = new ManualResetEvent(false); public static ManualResetEvent sendEvent = new ManualResetEvent(false); public static void startListen() { try { IPAddress ipAddress = IPAddress.Parse("192.168.1.101"); IPEndPoint ipEnd = new IPEndPoint(ipAddress, 1002); Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serverSocket.Bind(ipEnd); serverSocket.Listen(10); Console.WriteLine("server is start!"); while (true) { connEvent.Reset(); serverSocket.BeginAccept( new AsyncCallback(AcceptedCallback), serverSocket); connEvent.WaitOne(); } } catch (Exception) { throw; } } public static void AcceptedCallback(IAsyncResult asynResult) { connEvent.Set(); Socket server = (Socket)asynResult.AsyncState; Socket handler = server.EndAccept(asynResult); Console.WriteLine("a client is connected:"+handler.RemoteEndPoint); server.BeginAccept( new AsyncCallback(AcceptedCallback), server); Receive(handler); } public static void Receive(Socket handler) { handler.BeginReceive( byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(ReceivedCallback), handler); } public static void ReceivedCallback(IAsyncResult asynResult) { Socket handler = (Socket)asynResult.AsyncState; int length = handler.EndReceive(asynResult); string receivedString = Encoding.ASCII.GetString(byteData,0,length); Console.WriteLine("received message:"+receivedString); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; namespace MyAsyncClient { class Program { static void Main(string[] args) { startClient(); } public static ManualResetEvent connEvent = new ManualResetEvent(false); public static ManualResetEvent receiveEvent = new ManualResetEvent(false); public static ManualResetEvent sendEvent = new ManualResetEvent(false); public static byte[] byteData = new byte[1024]; public static void startClient() { IPAddress ipAddress = IPAddress.Parse("192.168.1.101"); IPEndPoint ipEnd = new IPEndPoint(ipAddress,1002); Socket client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); Console.WriteLine("client is start!"); client.BeginConnect( ipEnd, new AsyncCallback(ConnectedCallback), client); connEvent.WaitOne(); } public static void ConnectedCallback(IAsyncResult asyncResult) { Socket client = (Socket)asyncResult.AsyncState; Console.WriteLine("connected to server:"+client.RemoteEndPoint); client.EndConnect(asyncResult); //connEvent.Set(); send(client, "I am client"); } public static void send(Socket client,string message) { byteData = Encoding.ASCII.GetBytes(message); Console.WriteLine("send a message:"+message); client.BeginSend( byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), client); sendEvent.WaitOne(); } public static void SendCallback(IAsyncResult asyn) { Socket client = (Socket)asyn.AsyncState; client.EndSend(asyn); } } }