C#Socket服务端异步接收客户端返回的数据
RecVing这个方法结束标识Socket被释放掉了。释放掉是不是就表示Socket连接断开了呢?怎么样在断开之前接收到客户端返回的数据呢?...
RecVing这个方法结束标识Socket被释放掉了。释放掉是不是就表示Socket连接断开了呢?怎么样在断开之前接收到客户端返回的数据呢?
展开
1个回答
展开全部
屏幕上没有任何代码说明socket被释放了啊- - 我觉得你一定是误解了什么
socket属于非托管资源 没有disconnect/发送0长包/shutdown/主动dispose 都不意味着连接断开
当你Accept的时候 应该试图用一个List保存已经连接的客户端socket
然后使用一个异步方法独立的管理它们的持续性通信
socket属于非托管资源 没有disconnect/发送0长包/shutdown/主动dispose 都不意味着连接断开
当你Accept的时候 应该试图用一个List保存已经连接的客户端socket
然后使用一个异步方法独立的管理它们的持续性通信
追问
我是使用BeginAccept异步操作来接收一个链接的。既然说没有断开的话那为什么我第二次接收到客户端传入的数据和第一次一样呢
这种写法是属于长连接还是短连接?
追答
这取决于客户端是否和你进行断开...
不过你当前代码里也没有表示“持续的维护收发信息循环”的方法。。
可以看做是写的不完整的短连接吧
至于接受到什么数据 和上面的逻辑没有关系 这取决于客户端发了什么..或者客户端第二次又重新连接了 发了和第一次同样的内容
总之 把accept和receive写到一起 这种行为不太好
异步操作本身也不太符合人类思维习惯 你要逐渐适应 把不同的业务代码分开来写 receive也是可以来异步执行的 否则会阻塞下一次的accept
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询