当前位置: 首页 > 编程语言 > C#

C#Socket编程分享

时间:2023-04-10 14:44:55 C#

C#Socket编程哎,我正在做C#异步socket编程的噩梦。你能指点我深入解释异步编程的指南或教程或书籍吗?如果可能,包括如何在开始发送/接收函数中使用状态参数来处理多个客户端。您可以阅读C#中的异步套接字编程第1部分和C#中的异步套接字编程:第2部分这些是快速Google搜索的结果。服务器可以用以下方案组织:分离的线程监听客户端连接的端口。///异步服务器publicclassAsyncServer{///服务器套接字privateSocket_serverSocket;///同步等待元素privatestaticManualResetEvent_connectionMutex=newManualResetEvent(false);///客户端处理程序privateClientManager_clientManager;publicAsyncServer(stringipAddrees,intport){try{this._serverSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);this._serverSocket.Bind(newIPEndPoint(IPAddress.Parse(ipAddrees),port));}catch(Exceptionex){thrownewException("ServerInitError.",ex);}}privateBackgroundWorker_listenThread=newBackgroundWorker();publicvoidStart(){this._clientManager=newClientManager(this._clientConnections);this._listenThread.WorkerReportsProgress=true;this._listenThread.WorkerSupportsCancellation=true;this._listenThread.DoWork+=newDoWorkEventHandler(ListenThread_DoWork);this._listenThread.RunWorkerAsync(this._serverSocket);}///线监听端口privatevoidListenThread_DoWork(objectsender,DoWorkEventArgse){SocketserverSocket=(Socket)e.Argument;serverSocket.Listen(100);while(true){//重置互斥量_connectionMutex.Reset();serverSocket.BeginAccept(newAsyncCallback(this.AcceptCallback),this._serverSocket);//等待下一个连接_connectionMutex.WaitOne();}}///客户端连接列表privateList_clientConnections=newList();publicintConnectionsCount{get{returnthis._clientConnections.Count;}}///处理连接的回调方法privatevoidAcceptCallback(IAsyncResultasyncResult){_connectionMutex.Set();套接字serverSocket=(Socket)asyncResult.AsyncState;套接字clientSocket=(Socket)dserverSocket(asyncResult);this._clientConnections.Add(clientSocket);this._clientManager.HandleClient(clientSocket);方法AcceptCallback(IAsyncResultasyncResult)处理所有新的客户端连接并传输到ClientManager,它创建单独的路由publicclassClientManager{privateList_clientProcessors=newList();私有列表_connections;publicClientManager(Listconnections){this._connections=connections;}///处理客户端连接publicvoidHandleClient(SocketclientSocket){BackgroundWorkerclientProcessor=newBackgroundWorker();clientProcessor.DoWork+=newDoWorkEventHandler(ClientProcessing);this._clientProcessors.Add(clientProcessor);列表参数=newList();////args.Add(...);clientProcessor.RunWorkerAsync(args);}privatevoidClientProcessing(objectsender,DoWorkEventArgse){//读取参数Listargs=(List)e.Argument;ProtocolSerializer序列化器=newProtocolSerializer();try{while(socket.Connected){//...}}catch(SocketException){//...}catch(Exception){//...}}}以下链接提供了有关C#异常步骤套装编写程序的步骤教程。http://csharp.net-informations.com/communications/csharp-socket-programming.htm阿尔多。以上就是C#学习教程:C#socket编程分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: