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);
}
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);
}
char sendseq[100];而你在Indy中:
var
RecvMsg: array[0..5] of char;你设置为:
RecvMsg:array[0..99] of char;
试试
sendseq[1]='b';
sendseq[2]='c';
sendseq[3]='\n';
用readln应该能收到了
客户端是发送了3个字节:
sendseq[0]='a';
sendseq[1]='b';
sendseq[2]='c';我的indy中:
AThread.Connection.ReadBuffer(RecvMsg,sizeof(RecvMSG));这个sizeof(RecvMSG)如果设成3则ok,设得大则客户端要发送很多次才能有1次响应.