indy向linux客户端发送可以,问题出在indy收包上.procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  msg:string;
begin
  msg:=AThread.Connection.ReadLn;
  memo2.Lines.Add('aaaaaa');
end;
这样用ReadLn什么也收不到.换成
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  RecvMsg: array[0..5] of char;
begin
  AThread.Connection.ReadBuffer(RecvMsg,sizeof(RecvMSG));
  memo2.Lines.Add('aaaaaa');
end;
这样用ReadBuffer有时候收的到有时候收不到.
附linux下的客户端程序:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <stdarg.h>main()
{
    int sock,myseq;
    char recvseq[100];
    struct sockaddr_in server;
    char sendseq[100];
  
    sendseq[0]='a';
    sendseq[1]='b';
    sendseq[2]='c';

    sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(sock<0)
    {
        printf("socket creat failed\n");
        exit(1);
    }
    bzero(&server,sizeof(server));
    server.sin_family=AF_INET;
    server.sin_addr.s_addr=inet_addr("192.168.6.230");
    server.sin_port=htons(1032);    if(connect(sock,(struct sockaddr *)&server,sizeof(server))<0)
    {
        printf("connect failed \n");
        exit(1);
    }    while(1)
    {
        if(recv(sock,&recvseq,100,0)>0)
        printf("recvseq=%s\n",recvseq);
        if(send(sock,sendseq,strlen(sendseq),0))
            printf("send success\n");
        else
            printf("send success\n");
    }
    return(0);
}

解决方案 »

  1.   

    你的客户端中:
     char sendseq[100];而你在Indy中:
    var
      RecvMsg: array[0..5] of char;你设置为:
    RecvMsg:array[0..99] of char;
    试试
      

  2.   

    sendseq[0]='a';
        sendseq[1]='b';
        sendseq[2]='c';
        sendseq[3]='\n';
    用readln应该能收到了
      

  3.   

    发现是这样的情况:
    客户端是发送了3个字节:
        sendseq[0]='a';
        sendseq[1]='b';
        sendseq[2]='c';我的indy中:
    AThread.Connection.ReadBuffer(RecvMsg,sizeof(RecvMSG));这个sizeof(RecvMSG)如果设成3则ok,设得大则客户端要发送很多次才能有1次响应.