我用的是这个ClientSocket1.Socket.SendText('')

解决方案 »

  1.   

    kingsong如果我用ClientSocket1.Socket.SendText('') ,怎么一次把几个信息送出去呀?
      

  2.   

    怎样叫几个信息。
    可以信息之间加上自定义的分割符如#,然后一次发送,这需要接收方判断了。
    我也没试过,如果发送方不停的执行sendtext,接收方read事件中来不及处理怎么办,是先放到缓存中,再一次处理收到的所有信息呢?还是发送方每个sendtext都会使接收方产生一个read事件。
      

  3.   

    kingsong,你一定要帮帮我,是先放到缓存中,再一次处理收到的所有信息?我怎么才能一次发送一个记录类型的所有信息?下面是我错误的程序,请问我该怎么改?
    Tmyrecord=record
      NO:string;
      name:string;
      age:integer;
      ...
    end;
    myrecord:Tmyrecord;if clientsocket1.Active=true then
        clientsocket1.Active:=false;
      with clientsocket1 do
      begin
        host:='192.168.4.142';
        port:=1010;
        active:=true;
        socket.sendbuf(myrecord,sizeof(myrecord));
      end;
      

  4.   

    是什么不成功?是服务器端什么信息都收不到吗?建议几点:
    1、保证端口一致,并且退出时一定将active:=false;否则不能二次运行。
    2、用sendtext,肯定可以,我试过了。
    3、将Tmyrecord中的string改为string[10],定个长度。我试了试,服务器端可以收到信息,但不知为何多了很多乱码。
    供参考。
    你程序没错。
      

  5.   

    另:我想说说我用ClientSocket&ServerSocket的几点体会:
    1、这类程序通讯不是重点,关键是C-S之间的通信协议,在写码之前,先好好搞搞。
    2、当ServerSocket提供一个端口,而有多个ClientSocket去联时,那ServerSocket端将依次产生若干个Connection,为Connection[0],Connection[1]...,而ServerSocket靠这个来区分与哪个ClientSocket进行通信,这将是非常麻烦的事。因为当有一个ClientSocket断了时,余下的Connectiong将依次前移,即若Connection[m]断了,Connection[n]将变为Connection[n-1](n>m),那Server如何确定与哪个Client通讯。请教某大虾,说是做一些Health Check,Server每隔一段时间向所有Connection发信息,而Client即发个短信息标明身份。然后存放在一数组里。实现起来好像也很麻烦。
    3、ServerSocket是用一个Read事件来接收信息,因此必须判断是哪个ClientSocket发来的,因此ClientSocket发信息时要带上自己的标识。(说到底是通信协议问题)。
    4、若是ClientSocket.Active:=false,那ServerSocket将会立刻触发ClientDisconnect事件。而若是网线断了,则会需要很长时间。
        题外话,曾开发过打字比赛用的软件,比赛前一天一切OK,比赛那天,与ServerSocket怎么也联不通(网络当然没问题),丢了一个大脸,到现在也不知道是什么原因。老天啊,给我个理由吧。