永发信息网

C# SOCKET 异步接收的问题

答案:2  悬赏:30  手机版
解决时间 2021-04-12 07:09
一开始我是使用int recvPle = MySocket.ReceiveFrom(rdata,ref _recvep);来接受数据的,但是我发现如果接收不到任何数据 程序就会死在这里 网上查了一番后发现可以使用异步 类似与
MySocket.BeginReceiveFrom(rdata, 0, _dlen, SocketFlags.None, ref _recvep, new AsyncCallback(CallReceive), null);
我想问的是这里这几个参数各是什么意思 另外回调函数CallReceive要怎么写 我希望的是接收数据 1秒之内接收不到就认为没有数据继续执行下面的代码,不知道如何解决。
最佳答案
异步的意思就是当服务端发送给客户端多少数据,客户端就接收多少数据,而不是客户端请求接收多少数据,然后等待服务端发送数据。
MySocket.BeginReceiveFrom(rdata, 0, _dlen, SocketFlags.None, ref _recvep, new AsyncCallback(CallReceive), null);
重要的就是AsyncCallback这个参数了,这个是一个委托,就是函数的指针,将你需要接收数据的函数声明为委托,作为这个参数,在接收到数据的时候,这个函数就会被调用。
全部回答
socket传输中拿tcp传输为例。假设服务器a 客户机b进行通信传输。首先需要在a机建立监听线程。监听某一端口,那么b机可以向a机发送通讯请求,b机连接到a机以后。a机可以从他的监听队列中取的一个监听对象。在a端拿到了这个socket对象就可以进行接收跟发送数据了。这里问题就出现了。假如b端在请求a端的时候请求成功就发送一条数据。那么 a端就可以直接拿socket对象得到他的信息。但是假如b端并没有在连接成功后直接发送信息而是在后来不确定的时间这内发送的信息。那么a端就无法得到这条信息。通常的做法是用一个定时器去不短的扫描这个数据缓存区。看是不是有数据存在这样效率非常低下。那么如何解决这个问题呢。就用到了我们的异步传输。异步传输的原理是。在a端得到这个socket对象以后并不是直接去接收数据而是建立一个回调函数。回调函数是由系统维护的。他在指定的时间自动去扫描数据存储区。假如有数据他就把数据存储到指定的字节数组中。不用用户自己去关心。 那么同步与异步分别应用于什么情况呢?假如用户的socket连接数据比较短暂的。一次连接直接发送数据的或客户端比较少的就使用同步假如用户的socket属于长时间连接的就使用异步方式
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如果上司强迫你去做你不想做的事情怎么办?
梦幻老鸟进!!
新郑市检察院怎么去啊,有知道地址的么
重飞渡的重什么意思,“敌重兵”的“重”和“
什么是波斯密码?
在社会中学什么最合适
(问道)什么坐骑宝宝最好?我要买!
打破世界吉尼斯记录有钱吗
谁空间有张韶涵的《第五季》
哪位有奥比岛号不怎么登我可以帮你玩,你设好
新农都水产市场最近地铁站是什么站
单选题下列句子,没有语病的一句是A.素质可以
为什么小鸡老是啄箱子
黄豆放水里能发芽哇?(生物老师就是叫我们这
我买了一套房子 今天已经去房管局已经递件成
推荐资讯
谁知道最近有什么好看的港台电视剧啊?
甲、乙两种物质的溶解度都随温度升高而增大。
寻仙现在那个区最多人玩电信的?
帮帮我啊急急急
直播吧怎么卸载
南宁市顺秋(宏秋)饮料经营部在什么地方啊,我
精华该选保湿的还是美白的呢?
如图所示,“6V??3W”的小灯泡L与额定功率为1
月经延长,可以吃桂枝茯苓丸止血吗
电脑重装系BIOS的时候不能点左边一排的,这是
奥斑马从A城,小美和欧欧从B城同时出发,相向
美萍进销存管理系统显示找不到指定模板怎么办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?