免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4476 | 回复: 10
打印 上一主题 下一主题

socket接收服务器recv和向服务器发送的send中的socketfd能否用两个? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-14 10:29 |只看该作者 |倒序浏览
具体意思如下:
想创建2个线程,设备接收服务器的命令recv,和 设备向服务器发送数据send;

同一台服务器A向设备B发送命令,我用recv接收 用一个socketfd1;
然后设备B向该服务器A发送数据,用send,用一个socketfd2,
这两个socketfd是不一样的,在两个函数中分别定义(即2个线程中定义), 这样做行不行?

服务器A和设备B的通信能正常吗?

论坛徽章:
0
2 [报告]
发表于 2009-05-14 10:31 |只看该作者
我试过在一个函数中同时实现收和发,用同一个socketfd是可以正常通信的,
但是现在想优化代码,所以弄了2个线程,不知道行不行?

论坛徽章:
0
3 [报告]
发表于 2009-05-14 10:43 |只看该作者
这样做当然是可以,可是这也不一定是优化代码,肯定会导致更复杂一点。
你为什么一定要用两个线程呢?你的传输量很大还是计算量很大?
客户端和服务器有状态的转换吗?

论坛徽章:
0
4 [报告]
发表于 2009-05-14 10:51 |只看该作者
你指的是什么状态?

论坛徽章:
0
5 [报告]
发表于 2009-05-14 11:01 |只看该作者
因为我这个系统里面有一个wlan和一个cdma模块,所以接收服务器的命令可能通过两种方式:tcp和短信,所以我想创建2个接收线程一直在哪里接收,和2一个发送线程。

[ 本帖最后由 herocsz 于 2009-5-14 11:08 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-05-14 11:40 |只看该作者
那可以写了看看

论坛徽章:
0
7 [报告]
发表于 2009-05-15 00:03 |只看该作者
FTP协议中的控制命令和数据发送就是两个FD,  数据SOCKET的建立绑定/TCP建立连接 有主动被动(PORT, PASV)两种模式

论坛徽章:
0
8 [报告]
发表于 2009-05-15 09:35 |只看该作者
状态就是同样的两次输入在不同的情况下产生的结果不同啊
比如protocol有一个行命令 RECV 320\r\n
来表示接下来接收320字节的数据(一般来说二进制数据我就这么做),然后就一直收,直到320字节收满。如果数据中碰巧有REC 320\r\n或其他protocol可以当成命令解释的东西,也不去执行,因为它已经把这个当成数据了。
你可以看看telnet服务器的状态机设计

如果你的程序是收数据,处理,发出,这么简单的话,那多线程和异步io都是可以的。我的理解是cpu消耗比较大的时候,用多线程比较好,io处理比较频繁的时候用异步io比较好。

论坛徽章:
0
9 [报告]
发表于 2009-05-15 12:50 |只看该作者
哦,那我没有那样的状态的。
我只是:收数据,处理,发出。

[ 本帖最后由 herocsz 于 2009-5-15 12:51 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-05-19 16:06 |只看该作者
试过了,可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP