作者Achillean (山猪元年革命志士)
看板C_Sharp
标题[问题] Socket,Client,ACK的架构问题
时间Thu Aug 1 11:05:30 2013
请问一个Socket的Server-Client机制
如果我设计的架构Client,具有传送和接收server广播的功能
1. 传出动作流程有作接收ACK
确认命令是否成功传到Server端
Server收到Client讯息会回传ACK字串
2. 有一只接收的执行绪在等待Server传命令过来
这样当再作动作一时候,Server传ACK过来时候
有可能会被动作二的等待接收的执行绪抢走
这边架构应该怎麽设计会比较好?
让接收这个动作同时存在1,2两个地方
还是ACK有别得方法实现不会干扰?
初学Socket,请指点一下
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.78.236
1F:→ andymai:所以是两条执行绪都在等着收封包?弄第三条执行绪专门收封 08/01 12:45
2F:→ andymai:包~收到之後立刻判断该给哪条执行绪执行~会不会比较好? 08/01 12:46
3F:→ andymai:不然就是不要 bind 同一个 port 了... 08/01 12:48
只有接收一条执行绪
while (true)
{
byte[] data = new byte[1024];
int recv = this.socket.Receive(data);
...
}
参考范例写法是这样
执行绪跑到Receive就会停住直到有命令近来才会往下走
传送是用副程式
流程是
传出之後用do-while回圈
判断有无收到Server回传"ACK" 否则 重传三次
专收讯息再分派的方向有思考过
想不太出来怎作
※ 编辑: Achillean 来自: 122.116.78.236 (08/01 12:55)
4F:→ andymai:???那就把接收这条当成专门收的执行绪啊?另外再开一条执行 08/02 09:37
5F:→ andymai:绪来专门处理~不就好了?避免接收和处理忙不过来~应该还要 08/02 09:39
6F:→ andymai:有个queue来放待处理的资料就是了... 08/02 09:39
7F:→ Beramode:既然只有一个thread在接资料,你回传的ACK就要能被判断 08/09 14:57
8F:→ Beramode:是谁回传的 08/09 14:59