首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

bcb 6.0 上TCP通信有关问题

2012-12-15 
bcb 6.0 下TCP通信问题在c++ builder 6.0中,我之前是用UDP协议(没有用到indy控件)实现的与其他主机实现的

bcb 6.0 下TCP通信问题
    在c++ builder 6.0中,我之前是用UDP协议(没有用到indy控件)实现的与其他主机实现的通信,现在我要把UDP协议换成TCP协议进行通信,请问应该怎么做,使用indy控件还是用其他的方法(比如说直接用socket写)实现起来比较简单一点。如果使用indy控件的话,那么在c++ builder 6.0环境下安装哪个版本的indy控件好用一点呢(目前我的BCB 6.0没有自带的indy)?要是用其他方法实现TCP通信的话,应该怎么实现,提供一个具体的思路吧,谢谢!!!
    我现在就是要实现这样一个功能:我这端相当于一个服务器端,客户端发送请求过来,我就把该客户的所有设备信息以数据包的形式发送给客户,相当于我这段同时要实现收包和发包的功能。我在网上找过一些资料,但是觉得资料都不够全面,这个问题也折腾很久了,始终没有得到解决,麻烦各位提供一个具体的思路或者指引一个大概的方向吧,谢谢!!!
[最优解释]
直接用socket就行,生成一个线程用于listen,收到连接后再另开一个线程处理数据传输
[其他解释]
这个问题不复杂,首先你要定义一个包格式,里面包含数据的长度,数据内容等字段,另外需要注意的是tcp是数据流,你接受到数据后,必须手动将包分开成一个一个的数据包

tserversocket可以用来作为服务端,楼主以这个为关键词检索一下,应该就相关信息出来的
[其他解释]
监听过程大致是这样的:
    // 先创建socket
    SOCKET idSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP));

    // 绑定本地地址
    sockaddr_in sa;
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = inet_addr(szIPAddr);
    sa.sin_port = htons(nPort);
    bind(idSocket, (sockaddr*)&sa, sizeof(sa));

    // 开始监听
    int nMaxConn = 20;   // 最大连接数
    listen(idSocket, nMaxConn);

    // 处理接收到的连接
    sockaddr_in saIncoming;
    int nFromLen = sizeof(saIncoming);
    int idNewSock;
    while ( (idNewSock = accept(m_idSocket, (sockaddr*)&saIncoming, &nFromLen)) != SOCKET_ERROR ) {
        ProcessNewConn(saIncoming, idNewSock);   // 自定义的处理函数
    }


在自定义函数ProcessNewConn里面使用idNewSock进行通信,结束后关掉idNewSock就行了
[其他解释]
TCP协议的socket,要先listen -> accept,给你一些例子,请参考:
http://download.csdn.net/detail/geoff08zhang/4571358
[其他解释]
应该把UDP接收后再用TCP转发吧。
[其他解释]
你好,麻烦你讲的详细一点好吗,谢谢!

引用:
直接用socket就行,生成一个线程用于listen,收到连接后再另开一个线程处理数据传输

热点排行