我目前有一个项目,是使用TCP/IP协议的。另一个外国公司提供了TCP/IP的协议,协议里定义了好几种数据包格式,各种包长度不同。我需要建立一个socket客户端,然后向他的服务端发送数据包,然后读取他返回的数据包。因为我只能采用非阻塞方式,当我发送完包后,如何读取他返回的数据流?因为他的包并不是一次性到达,因此我必须多次读取然后组装,这个比较郁闷,我是一头雾水,有做过的请指点下谢谢!~其实我就是使用客户端组件就可以了,indy的IdTCPClient是阻塞的,delphi以前的SocketClient,和现在Delphi7的TcpClient,这几种组件,我改如何选择,如何使用啊看到一写资料,说发包后创建线程,一边接收一边解析,是什么意思?
你只需要使用socket發送與接收就好了.
樓主需要加強TCP/IP的知識.可以看看相關RFC文檔.是否客戶的數據格式是架構於TCP/IP之上,用TCP/IP重新封裝.類Oracle8的net8協議,http,smtp之類.
楼主可以参考一些源码,比如TSocketConnection的实现源码.明白楼主面对的难点,其实这样类似的遇到稍复杂的数据问题,都有一个原则性的思路:使用队列
这用队列是广义的,也许可以是数据库的一张表,也许是内存中一个链表,也许是利用WINDOWS消息队列.....