我用serversocket做服务端,IdTCPClient做客户端,IdTCPClient.Connect;是客户端程序就死掉了,但serversocket能接收到它的连接。我想问soket能和indy怎样才能进行通讯?

解决方案 »

  1.   

    可以,我曾经这样做过。因为ServerSocket默认是非阻塞(NonBlocking)式的,而Indy的IdTCPClient是阻塞式的,所以客户端会出现死机现象。解决方法:在客户端加入一个IdAntiFreeze控件即可。不知道有没有说清楚。
      

  2.   

    1.用idtcpserver做服务器端,clientsocket做客户端,客户端连接服务器时,我在服务器端想客户端发出一条应答消息(在Connect事件中),客户端可以收到这条信息,但是clientsocket.socket.senttext('sss'),服务器并没有收到消息,也就是说没有触发Execute事件,为什么2.服务器端如何区分不同的客户端,想向某一个客户端发信息,如何做?
      

  3.   

    ……
    1。不可能。
    2。自已加一个Context对象,indy10已经有了。Socket和indy当然能通信了,都是socket做的,这都不知道。不过前提是indy端不能使用intercept(拦截者)
      

  4.   

    to starcbh:
    你是说第一点不可能吗,这是我测试的结果啊
      

  5.   

    1.。。clientsocket.socket.senttext('sss'),服务器并没有收到消息,也就是说没有触发Execute事件,为什么不大可能不触发EXECUTE事件的我想可能性只有一点,你客户端并未正确执行。。
    也就是当非阻塞方式下面,
    tclientSocket未等连接成功就调用Sendtext造成发送失败。2,INDY TCP服务控件每个EXECUTE事件都在独立的线程中执行的。。
    只要处理的时候,哪儿来的哪儿去,就行。
    要唯一判断是哪个客户端连接,可以用对端的IP和端口判断。
      

  6.   

    我使用过java,delphi的socket测试过,都能通讯。不过在和手机通讯,出现中文问题。不知道谁解决了。
      

  7.   

    TO:cx_super(黄连),大部分手机是支持UTF8编码,试试编码转换一下。
      

  8.   

    可以的,它们都是通过TCP/IP进行通信的,与控件无关。
      

  9.   

    可以, Indy也是从Windows Socket 继承下来的。