作者VVll (J.)
看板C_Sharp
标题Re: [问题] 如何让client持续等待
时间Mon Jun 23 22:03:38 2014
※ 引述《tree581 (talltree)》之铭言:
: 我的client socket每次接受完档案就停止
: 我要如何让它持续地等待...
: 就算接收完档案也还会继续等待接收下一个档案
: 这是我的接收端程式码: http://paste.ideaslabs.com/show/zZWKYkz9xP
: 後来我试着加timer也: http://paste.ideaslabs.com/show/qKqo9KduXw
: 结果都没反应....
: 我的发送端程式: http://paste.ideaslabs.com/show/ZYRhYBH1r6
: 求救 如何让它执行完还能继续等待
先说明你程式码的问题
clientSock.Close();
当程式执行到这行时,socket就已经被关闭了,当然不会继续收到讯息
要写socket 基本有两个作法可以作
同步 跟 非同步 MSDN上都有饭粒,下面两个连结是非同步作法
Asynchronous Client Socket Example
http://msdn.microsoft.com/zh-tw/library/bew39x2a(v=vs.110).aspx
Asynchronous Server Socket Example
http://msdn.microsoft.com/zh-tw/library/fx6588te(v=vs.110).aspx
最常见的作法是同步的,但你要建一条thread去负责某个client的监听
因为如果是单续的,就会因为同步的关系,导致程式卡在某个client的receive上
所以有几个client在连线就要建几条thread 去做监听
而非同步的,就是用事件委派的方法去处理,好处就是你不用自己处理多续问题
而不管同步或者 非同步
都必须考虑到一个问题,传递的过程中,资料可能接收不完整
比如
21:55:30 client send: AA
21:55:31 client send: BB
21:55:35 server recieve: AAB
21:55:36 server recieve: B
这个情况是可能发生的
所以要自己去作资料检查的处理与验证
常见的几个方法
1. XML
2. JSON
3. 自己定义封包格式
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.240.239.100
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1403532224.A.91D.html
1F:推 neo5277:推 06/24 00:08
2F:推 nfsong:push 06/24 12:44
3F:→ a926:记得做这类的时候 传送跟接收 都要让资料跑一会儿.xD 06/24 16:16