delphi如何使用TCP/IP socket向服务端收发数据流

risingsoft 2006-12-26 10:25:01
我目前有一个项目,是使用TCP/IP协议的。另一个外国公司提供了TCP/IP的协议,协议里定义了好几种数据包格式,各种包长度不同。我需要建立一个socket客户端,然后向他的服务端发送数据包,然后读取他返回的数据包。

因为我只能采用非阻塞方式,当我发送完包后,如何读取他返回的数据流?因为他的包并不是一次性到达,因此我必须多次读取然后组装,这个比较郁闷,我是一头雾水,有做过的请指点下谢谢!~

其实我就是使用客户端组件就可以了,indy的IdTCPClient是阻塞的,delphi以前的SocketClient,和现在Delphi7的TcpClient,这几种组件,我改如何选择,如何使用啊

看到一写资料,说发包后创建线程,一边接收一边解析,是什么意思?
...全文
786 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gangjh 2006-12-26
  • 打赏
  • 举报
回复
TCP/IP 數據包封裝,重組一般都由操作系統完成.
你只需要使用socket發送與接收就好了.
樓主需要加強TCP/IP的知識.可以看看相關RFC文檔.

是否客戶的數據格式是架構於TCP/IP之上,用TCP/IP重新封裝.類Oracle8的net8協議,http,smtp之類.
gangjh 2006-12-26
  • 打赏
  • 举报
回复
楼主不知道自己有什么,
也不知道自己要什么
halfdream 2006-12-26
  • 打赏
  • 举报
回复
楼主是做长连接方式的交易吧,

其实用阻塞与非阻塞方式SOCKET都可以,如使用前者是另建立独立的接收线程,后者则处理事件响应...
楼主可以参考一些源码,比如TSocketConnection的实现源码.



明白楼主面对的难点,其实这样类似的遇到稍复杂的数据问题,都有一个原则性的思路:使用队列
这用队列是广义的,也许可以是数据库的一张表,也许是内存中一个链表,也许是利用WINDOWS消息队列.....


2312 2006-12-26
  • 打赏
  • 举报
回复
用IdTCPClient加阻断器(Indy intercepts)配合使用呢

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧