procedure TForm1.ServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  p:pchar;
  length:longint;
  Count,i:Integer;
  Tempstr:pchar;
begin
    p:=nil;
    while socket.ReceiveLength>0 do begin
        length:=socket.receivelength;
        Getmem(p,length);
        TRY
            socket.ReceiveBuf(p^,socket.receivelength);
            Count:=Server.Socket.ActiveConnections;
            for i:=0 to Count-1 do
                Server.Socket.Connections[i].SendBuf(p^,length);
        FINALLY
            FreeMem(p);
        END;
    end;
            Tempstr:=pchar('receiveOk'#13#10);
            socket.SendText(TempStr);//c
end;
//Server是一个TsocketServerclient端每次发一个信息,得到的是发去的信息+'receiveOk' ,按设想应该是(如客户端发'test')
testreceiveOk
问题是:client得到的有两种
1.testreceiveOk
2.test
  receiveOk
不确定,且感觉和client的发送频率无关请明眼人指点一二.

解决方案 »

  1.   

    难道没人遇到同样的问题吗?
    以前在VB用SOCKET时就遇到过...
      

  2.   

    请问楼主什么方法或者事件可以触发ServerClientRead事件
      

  3.   

    Client.Send -> Server.ClientRead
    Server.Send -> Client.Read
      

  4.   

    ClientSocket1.Host := Server;
            ClientSocket1.Active := True;
            ClientSocket1.port := 1024
    这段代码执行完不会触发ServerSocket1ClientConnect  和 ServerSocket1ClientRead 事件
    怎么回事呢
      

  5.   

    如果第二个数据包到了,第一个没收就会合起来,一起收到,要解决的话可以采用下面两种方法:
      1.在数据包的前面加上长度位,标识这个包的长度。
      2.用一个固定的东东结束一个数据包(比如回车),然后编程分析,如 HTTP 协议。(推荐)
      

  6.   

    to  summerriver(summer) 这是SERVER端,另有一个CLIENT端,向SVR连接,发信息触发.to zhangheaaa(竹):是这样的,但
    procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
    var
      re:pchar;
      sbuf:string;
      relong:integer;
    begin
        re:=nil;
        while socket.ReceiveLength>0 do
          begin
            //申请内存
            re:=AllocMem(socket.receivelength);
          TRY
            relong:=socket.ReceiveLength;
            Socket.ReceiveBuf(re^,Socket.receivelength);
            sBuf:=strpas(re);
            Setlength(sbuf,relong);        //count lenght
            TotalLen:=TotalLen+ relong;
            S1.Panels.Items[1].Text:='Total Received (Byte): ' + IntToStr(TotalLen);
            S1.Update();
          FINALLY
            freemem(re);
          END;
        M1.Lines.Add(sbuf);
      end;
    end;//memo M1列出来的结果是
    问题是:client得到的有两种
    1.testreceiveOk
    2.test
      receiveOk
    不确定,且感觉和client的发送频率无关to delphi2006(十三楼左转) :请明示!
      

  7.   

    示范程序中:
    procedure TForm1.btnSendClick(Sender: TObject);
    var
      i:integer;
      Count:Integer;
    begin
        Count:=Server.Socket.ActiveConnections;
        for i:=0 to Count-1 do
          Server.Socket.Connections[i].SendText(edtSend.text);
    end;
    这时的Server.Socket.ActiveConnections最多能有多少呢?
    一般会支持多少个客户端?