有几个问题想向高手请教,有关SOCKET通信,谢谢呀
有几个问题想向高手请教:
一个主程序H面向其它3个子程序通信分别开了3个serversocket(每一子程序对应一个),如果其中一个子程序A在某一时间连续不断地发送一些测量数据(数据很小,但频率很快,假定测量仪器的频率为每秒测100次)给主程序H,H在接到第一个数据的同时要转发给子程序B,并且还要负责处理子程序C的一些请求。
问:1。H程序的实现是否需要用多线程的方式来搭建。
2. 如何用SOCKET实现H在接收A数据的同时将数据转发给B,能否实现收一个就单独转发一个?(程序来不来得及?)
3. A程序发送的时候,是用sendbuf()好呢,还是用sendtext() 还是其它的?总感觉用sendbuf()和receivebuf()在通信时不容易控制,比如如果数据通过一个结构传送,那接收端如何复制数据和拆分数据,
唉,可能讲得比较乱,不知有没有人明白我的意思,高手能帮帮偶,给点建议吗?谢谢呀。 或者留下QQ号或MSN,EMAIL也可以让我单独请教。
[解决办法]
1.是否需要多线程并不是关键的,具体看应用的情况来确定,多线程会有多线程的问题,个人建议先实现功能;
2.只能程序当中进行转发,当然可以使用重叠IO进行异步发送;
3.SendBuf和SendText没有本质的区别,但是即使使用SendText也要处理返回值(实际发送的字节数),不未完全发送完预期发送的数据时继续发送后续数据,Recv的时候也是一样。实际上ReceiveBuf更容易控制。
[解决办法]
自己定义个结构,里面指定包的长度等,接收到了以后,根据你自己定义个格式,解析处理各个字段
[解决办法]
这个数据结构就相当于一个协议,只要你双方都是按照这个协议来作就没有问题了,最简单的就是一个BUFF长加上BUFF就可以了晒
你把 收数据和发送数据都开为单独的线程,只要程序启动起来就让这两个线程执行起来就可以了嘛,不用管速度,现在计算的速度应该可以解决你说的那个问题,最多再给线程加个锁,就可以解决问题了。
不用担心那么多,因为你的三个子程序的SOCKET可以用不同的端口嘛(port),所以不会互相影响,所以你想开几个线程几个SOCKET都没有关系的!
[解决办法]
问:1。H程序的实现是否需要用多线程的方式来搭建。
2. 如何用SOCKET实现H在接收A数据的同时将数据转发给B,能否实现收一个就单独转发一个?(程序来不来得及?)
3. A程序发送的时候,是用sendbuf()好呢,还是用sendtext() 还是其它的?总感觉用sendbuf()和receivebuf()在通信时不容易控制,比如如果数据通过一个结构传送,那接收端如何复制数据和拆分数据,
答:1。可以使用多线程,但根据你的具体问题,由于没有需要计算的部分,仅是转发数据,且数据量小使用单线程并发服务器更适合,简单点就是TClientSocket的非阻塞模式,自己可用Select实现。
2。可以实现收一个就单独转发一个,关键是定义好应用协议如:包头 数据 包尾,注意定义好转义字符,你的H进行拆包然后转发
3。SendBuf适合传二进制数据,对于文本如ASCII字符用SendText。当然SendBuf也适合文本。
4。如程序允许一定丢包对顺序要求不高,用udp可以避免封包。