用C++Builder写C/S遇到的问题

转自:blog.csdn.net/minpro
编写了一个用来收发消息的客户端,所以做一个简单服务器用来测试:
         这里出现了很多问题,而一些参考实例的解决方法都不实用,绕开了问题的难点。我的求解过程如下:
Ø          用TcpServer和TcpClient控件,双方均为阻塞式,客户端可以连接到服务器,但是服务器显示不出建立好的连接。表现是在服务器的OnAccept事件触发不了。
Ø          换用ServerSocket和ClientSocket控件,采用非阻塞式,这时,客户端向服务器发送数据成功并且服务器端接收成功,但是当服务器向客户端返回消息的时候出现错误:(由于套接字没有连接并且(当使用一个sendto调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受)。看来是服务器找不到与此客户端的连接。
为此:在服务器端的发送数据部分加上Connections[0]:
ServerSocket1->Socket->Connections[0]->SendText
             可以进行通信了。
Ø          把客户端的socket改成阻塞式,效果与上相同。
Ø          用TcpClient控件实现客户端,非阻塞式。客户端可以发送消息到服务器端并显示,可是服务器端的消息无法发送到客户端。前提是:这个服务器是那个可以通信的服务器,这是什么原因?
Ø          用TcpClient和TcpServer,两端都是阻塞式。不同的是:TcpClient连接后发送数据之后就断开连接,在TcpServer的OnAccept事件里响应连接并返回数据,二者可以通信了,但是数据有丢失。这里的原因是:OnAccept事件是在一条连接到来的时候触发的,而连接之后再发送数据是触发不了此事件的,所以客户端和服务器端在一次连接之后就通信了一次。而这里的一个进步之处是,OnAccept事件响应函数里的一个参数ClientSocket记录了这条刚到来的连接。
         为了在这里可以不断通信,判断ClientSocket->Connected,用while循环处理多次收发,结果确实收发了多次,但是断开之后服务器端进入一个死循环。
Ø          以上都是为了达到通信的目的,忽略了很多问题。在C++Builder里如何用TcpServer实现一个可靠的服务器,服务器为一条连接建立的线程是怎么调用的,TcpServer的响应事件很少,该怎样保持一条连接不断交互还有待研究。
我的问题:TcpServer是如何与多个客户端保持连接,并正确首发消息的?
                    多线程的程序................
                    阻塞式和非阻塞式通信在各个方面的区别,服务器端适合用什么方式?
                   据说C++Builder的Indy组件,服务器和客户端都是阻塞式的,而且这种组件很收欢迎,那么该如何处理阻塞式的问题呢?
                   客户端的阻塞式,只要把核心收发消息部分仍在一个线程的Execute()成员函数里就行,那么有更好的方法么?
                  在服务器端如何得到某一条具体的连接呢?
                 服务器端的OnAccept事件里的ClientSocket参数所代表的连接能保存下来么?
               .......................................................
              太多问题了,而C++Builder的大多数参考资料都是骗人的,Delphi的也找不到答案,哎!书里都是同样的东西加上不同的封面!!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值