一开始我是使用int recvPle = MySocket.ReceiveFrom(rdata,ref _recvep);来接受数据的,但是我发现如果接收不到任何数据 程序就会死在这里 网上查了一番后发现可以使用异步 类似与
MySocket.BeginReceiveFrom(rdata, 0, _dlen, SocketFlags.None, ref _recvep, new AsyncCallback(CallReceive), null);
我想问的是这里这几个参数各是什么意思 另外回调函数CallReceive要怎么写 我希望的是接收数据 1秒之内接收不到就认为没有数据继续执行下面的代码,不知道如何解决。
C# SOCKET 异步接收的问题
答案:2 悬赏:30 手机版
解决时间 2021-04-12 07:09
- 提问者网友:我的未来我做主
- 2021-04-11 15:17
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-04-11 16:43
异步的意思就是当服务端发送给客户端多少数据,客户端就接收多少数据,而不是客户端请求接收多少数据,然后等待服务端发送数据。
MySocket.BeginReceiveFrom(rdata, 0, _dlen, SocketFlags.None, ref _recvep, new AsyncCallback(CallReceive), null);
重要的就是AsyncCallback这个参数了,这个是一个委托,就是函数的指针,将你需要接收数据的函数声明为委托,作为这个参数,在接收到数据的时候,这个函数就会被调用。
MySocket.BeginReceiveFrom(rdata, 0, _dlen, SocketFlags.None, ref _recvep, new AsyncCallback(CallReceive), null);
重要的就是AsyncCallback这个参数了,这个是一个委托,就是函数的指针,将你需要接收数据的函数声明为委托,作为这个参数,在接收到数据的时候,这个函数就会被调用。
全部回答
- 1楼网友:一袍清酒付
- 2021-04-11 17:59
socket传输中拿tcp传输为例。假设服务器a 客户机b进行通信传输。首先需要在a机建立监听线程。监听某一端口,那么b机可以向a机发送通讯请求,b机连接到a机以后。a机可以从他的监听队列中取的一个监听对象。在a端拿到了这个socket对象就可以进行接收跟发送数据了。这里问题就出现了。假如b端在请求a端的时候请求成功就发送一条数据。那么 a端就可以直接拿socket对象得到他的信息。但是假如b端并没有在连接成功后直接发送信息而是在后来不确定的时间这内发送的信息。那么a端就无法得到这条信息。通常的做法是用一个定时器去不短的扫描这个数据缓存区。看是不是有数据存在这样效率非常低下。那么如何解决这个问题呢。就用到了我们的异步传输。异步传输的原理是。在a端得到这个socket对象以后并不是直接去接收数据而是建立一个回调函数。回调函数是由系统维护的。他在指定的时间自动去扫描数据存储区。假如有数据他就把数据存储到指定的字节数组中。不用用户自己去关心。
那么同步与异步分别应用于什么情况呢?假如用户的socket连接数据比较短暂的。一次连接直接发送数据的或客户端比较少的就使用同步假如用户的socket属于长时间连接的就使用异步方式
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯