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

TCPClient异步Socket回调分享

时间:2023-04-10 22:00:21 C#

TCPClient异步Socket回调请注意,题目是只在socket上使用异步回调方式!我想构建一个TCP客户端,它会在收到数据包和关闭套接字时通知我,因为NET提供的beginRecv功能,如果连接仍然可用,endRecv将不会通知。我的问题:有没有办法像使用WinAPI一样创建TCP客户端?我的意思是用消息调用WSAAsyncSelect,当收到消息时它会调用你在WSAAsyncSelect中调用的函数,然后你可以通过WParamsFD_CLOSEFD_READFD_WRITE查看连接是否关闭或是否有新数据包。如果没有。我不能同时控制我的连接和传入的数据包吗?我不想一直调用BeginRecvEndRecv。-。-提前致谢!如果传递包含对套接字的引用的状态对象,则可以访问套接字本身。公共类SocketState{publicSocketState(Sockets){this._socket=s;}私有套接字_套接字;publicSocketSocket{get{return_socket;}}}voidSomeFunction(){//在你的代码中做一些事情SocketStatestateObject=newSocketState(mySocket);mySocket.BeginReceive(缓冲区、偏移量、大小、标志、CallBack、stateObject);//做一些其他的事情}publicvoidCallBack(IAsyncResultresult){SocketStatestate=(SocketState)result.AsyncState;状态。Socket.EndReceive(结果);//用你的套接字做点什么。if(state.Socket.Available)mySocket.BeginReceive(buffer,offset,size,flags,CallBack,state);你的问题不是很清楚。根据您的问题,您似乎不想做任何额外的工作。没有一些额外的工作你就不能做异步。最好的方法是使用Microsoft的异步API中的BeginReceive/EndReceive。这些将在套接字关闭时调用您的回调。但是,通过这样做,您不能轻松地在.NET中使用IOStream支持,因此它需要一些额外的工作。如果你想要更多的控制权,你必须做更多的工作。这里的一切都是它自己的。您还可以编写一个简单的线程版本来监视套接字并为您提供事件和调用回调。上面的服务器类型代码和简单的socket代码都是C#学习教程:TCP客户端异步socket回调分享的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: