indy做服务器与linux通信可以吗?
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);
}