有关TCP异步通讯问题

Dean丁 2014-07-27 11:45:28
关于TCP异步通讯中,我一直有几个问题没搞明白
1.TCP异步通讯到底有什么作用???哪位大神能给我举个例子来说说不Orz
2.关于下面这段代码中WaitOne这个东西(阻止当前线程),这样写了以后那不是和TCP同步通讯是一样的效果了,都是要阻塞当前线程,那我干嘛还这么麻烦的写一个异步程序,直接写一个同步的多好啊。(这个程序是一本书上的TCP异步的例子)
        private void but_connect_Click(object sender, EventArgs e)
{
try
{
client = new TcpClient(AddressFamily.InterNetwork);
IPAddress ipadd = IPAddress.Parse(txt_hostname.Text.ToString());

AsyncCallback requestCallBack = new AsyncCallback(RequestCallBack);
allDone.Reset();

client.BeginConnect(ipadd, 3000, requestCallBack, client);

//public object Invoke(Delegate method, params object[] args);调用callback
lb_state.Invoke(setlistboxcallback, string.Format("本机终结点:{0}", client.Client.LocalEndPoint));
lb_state.Invoke(setlistboxcallback, "开始与服务器连接...");
allDone.WaitOne();
}
catch (Exception ee)
{
lb_state.Invoke(setlistboxcallback, string.Format("错误:{0}", ee.Message));
}
finally
{
}

}

3.解决TCP异步这个问题,直接开启多线程不就好了吗,干嘛还要弄异步这个东西,多麻烦啊??
...全文
276 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dean丁 2014-07-27
  • 打赏
  • 举报
回复
谢谢楼上的回答,你回答的第一个我知道,但是我我觉得在书上的这个程序中完全没有体会到异步的好处,上面那段程序是一个button的事件,点击这个事件后UI界面照样卡死,完全没有体会到异步的存在。能否举一个例子能够让人感觉到异步的存在?
wind_cloud2011 2014-07-27
  • 打赏
  • 举报
回复
看看网上的例子,TCP异步通讯资料不少,http://www.cnblogs.com/1848/articles/1818458.html
by_封爱 版主 2014-07-27
  • 打赏
  • 举报
回复
1`异步一般来说 是前面带有Begin方法... 比如beginreceive beginsend 等等.. 2`我不会无法作答不能误人子弟 3`线程只是防止UI卡而已..如果你有100个连接开启100个线程如果你有10W个连接呢? 你电脑能开那么多线程吗? 直接就蹦死..同步也一样 while(true)这种方式..只要client多了 立马就死 所以socket服务有几种方式. 1`死的最快的 就是同步+多线程的 2`好点的 就异步begin方式 3`在好点的 就是socketasynceventargs 4`在在好点的 我也不知道了...
窗前旧时光 2014-07-27
  • 打赏
  • 举报
回复
2.好久之前貌似看过这种写法, 这样可以实现自定义连接超时时间,完整的例子我记得是:后台有个计时器存在,到了一定时间后(自定义的超时时间),就不去阻塞这个线程。
hanhualangzi 2014-07-27
  • 打赏
  • 举报
回复
sp1234的回答还是那么的给力.
  • 打赏
  • 举报
回复
这种书之所以这样写,只是因为它不知道如何为 requestCallBack 方法执行时找到正确的环境数据。这是低级错误。 因为程序设计缺失,反而要用一个 WaitOne 来“弥补”这个问题,那是更加差劲了。
  • 打赏
  • 举报
回复
应该使用 BeingXXXX(.....) 方法,根本不应该去阻塞什么线程。 你的那本书,如果它告诉你10000个客户端连接就要占用10001个线程,那么可以看看就“算了”。

110,533

社区成员

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

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

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