indy做服务器与linux通信可以吗?

aunzou 2005-03-21 08:00:17
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);
}

...全文
64 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aunzou 2005-03-21
  • 打赏
  • 举报
回复
^_^,谢谢了,确实是一个'\n'
aunzou 2005-03-21
  • 打赏
  • 举报
回复
发现是这样的情况:
客户端是发送了3个字节:
sendseq[0]='a';
sendseq[1]='b';
sendseq[2]='c';

我的indy中:
AThread.Connection.ReadBuffer(RecvMsg,sizeof(RecvMSG));这个sizeof(RecvMSG)如果设成3则ok,设得大则客户端要发送很多次才能有1次响应.

getit911 2005-03-21
  • 打赏
  • 举报
回复
sendseq[0]='a';
sendseq[1]='b';
sendseq[2]='c';
sendseq[3]='\n';
用readln应该能收到了
pilicat 2005-03-21
  • 打赏
  • 举报
回复
你的客户端中:
char sendseq[100];

而你在Indy中:
var
RecvMsg: array[0..5] of char;

你设置为:
RecvMsg:array[0..99] of char;
试试

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧