
在 Socket 编程中,发送数据的函数 send() 和接收数据的函数 recv() ,往往需要等待发送和接收完成返回相应的值后才能执行下一条指令。所以当我们把 send() 和 recv() 放到同一个函数流程里的时候往往会导致I/O阻塞,无法实现同时收发数据。使用多线程编程,将监听函数、接收函数和发送函数分别放入不同的线程中,可以很好的避免出现以上问题。
如下为 Windows 下使用 Socket 编写 C/S 架构多线程通信 Demo ,代码很简单。
在 Socket 编程中,发送数据的函数 send() 和接收数据的函数 recv() ,往往需要等待发送和接收完成返回相应的值后才能执行下一条指令。所以当我们把 send() 和 recv() 放到同一个函数流程里的时候往往会导致I/O阻塞,无法实现同时收发数据。使用多线程编程,将监听函数、接收函数和发送函数分别放入不同的线程中,可以很好的避免出现以上问题。
如下为 Windows 下使用 Socket 编写 C/S 架构多线程通信 Demo ,代码很简单。
这是一个简单的在 Linux 环境下使用 TCP/IP 传输数据的小例子,分为 Server 端和 Client 端,Server 端将 Leap Motion 处理后的数据传送给 Client 端。
Linux Socket 部分参考自 红薯 分享在开源中国的例子:Linux Socket 编程实例(一个Hello World程序);
Leap Motion 部分使用的是官方提供的 Sample 程序。
1.TCP/IP 需要先初始化,使用代码进行端口绑定和监听。这部分代码可添加到 Leap Motion 监听类的初始化函数onInit()
中。
2.TCP/IP 中循环接收数据的部分可添加到 Leap Motion 的onFrame()
中。
3.在 Leap Motion 监听类退出时onExit()
,因同时关闭 Socket 的监听进程。
4.将 Leap Motion 处理后的整型数据通过stringstream作为中转,最后转换为char *型,送入缓冲区,发送。
5.Client 端接收到的为char *型,可通过字符串截取的方式取出数据并转换为整型。(该部分代码并未给出。)
Continue Reading…