Tidtcpserver使用问题。急在线等待。(100)

  • 主题发起人 主题发起人 dxj1976
  • 开始时间 开始时间
D

dxj1976

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Tidtcpserver 做了一个通讯服务程序,来监听我们公司GPRS终端返回的一些数据,IP地址可以得到,但为什么就是没有数据呢?代码如下:var Form1: TForm1;implementationuses FunForm;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var bindings:Tidsockethandle;begin bindings:=IdTCPServer1.Bindings.Add; bindings.IP:=Edit1.Text; bindings.Port:=StrToInt(Edit2.Text); IdTCPServer1.Active:=true; Button1.Enabled:=false; Button2.Enabled:=true;end;procedure TForm1.Button3Click(Sender: TObject);begin close;end;procedure TForm1.FormCreate(Sender: TObject);begin Button1.Enabled:=true; Button2.Enabled:=false; Memo1.Clear;end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);var ipstr,str:string;begin str:=AThread.Connection.ReadLn; str:=hex_str1(str); Memo1.Lines.Add(str);end;procedure TForm1.Button2Click(Sender: TObject);begin IdTCPServer1.Active:=false; Button1.Enabled:=True; Button2.Enabled:=false;end;procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);var ipstr,str:string;begin ipstr:=AThread.Connection.Socket.Binding.PeerIP; Memo1.Lines.Add(ipstr);end;end.
 
高手哪去了???
 
str:=AThread.Connection.ReadLn;你client端发送的时候加#13#10了吗?
 
不知道啊。为什么要加它们呢???非要加吗??我是个新手。请高手多多指教。
 
好心人。高手啊。帮帮忙。谢谢
 
怎么没有人理我啊!
 
GPRS 和普通网络一样的应用.建议你还是不要用 Indy9 直接用 TServerSocket
 
因为 Indy9 的阻塞特性 如果你不知道自己要读的数据长度AThread.Connection.ReadLn; 这个过程会一直等待,直到连接断开.所以造成你上面那种现象。没有数据显出来.
 
客户端发送的时候加上行结束符#13#10应该就可以了。
 
难道INDY这个控件真的不好用??????????必须要用TSERVERSOCKET吗???就没有其它的解决办法???
 
那你必需知道这个GPRS终端发的数据包的格式.如例华强的GPS都是发送的字符串。且是以 '*'开头以 '#'结尾.那么对应的。str:=AThread.Connection.ReadLn('#'); 改成这样就可以接收到数据了.
 
AThread.Connection.ReadLn;默认客户端发来的数据结束符是#10
 
我是从GPRS终端接收数据
 
欢迎加入:89862412c#讨论群!刚开的!我看其它好多群都满了,所以自己建了一个,希望和大家一起学习进步!
 
后退
顶部