异步socket问题:正在接受的套接字不会侦听连接

zzuyongp 2008-12-04 10:14:56
 IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 1234);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(100);
while (true)
{
allDone.Reset();
listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
allDone.WaitOne();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}


上面是异步socket应用的经典侦听代码,看msdn介绍知道“ 正在接受的套接字不会侦听连接。在调用 System.Net.Sockets.Socket.BeginAccept(System.AsyncCallback,System.Object)”。现在我的问题是已经连接的socket客户端(保持长连接)下一次发送数据,服务端如何接受呢?
举例:客户端A连接服务端F并保持连接,客户端B连接服务端F并发送数据Data,服务端F收到数据后转发给客户端A,A收到后发送确认信息,服务端F处理确认信息。
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzuyongp 2008-12-05
  • 打赏
  • 举报
回复
问题已经解决,,多谢 八爪煜 提供思路。。。
我的ReadCallback完成之后再次开启接收。。不过还没测如此实现会不会带来很大的性能损失
bbbbbb888888 2008-12-05
  • 打赏
  • 举报
回复
系统线程池来管理的,不会有大问题,更何况这是通常socket方法,
zzuyongp 2008-12-04
  • 打赏
  • 举报
回复
public static void AcceptCallback(IAsyncResult ar)
方法里面实现了如下方法
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
其中ReadCallback也是实现了的。。。

您的意思是不是在ReadCallback方法最后需要再次调用什么?

bbbbbb888888 2008-12-04
  • 打赏
  • 举报
回复
再AcceptCallback 方法里写,beginreceive,并且再实现receivecallback

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧