procedure TMainFrm.IdTCPServer1Execute(AThread: TIdPeerThread);
var
SOutline:WideString;
OutputStream:TStringStream;
begin
with AThread.Connection do
begin
SOutline:='0800051000ClinLoginRequest';
OutputStream := TStringStream.Create(SOutline);
OpenWriteBuffer;
WriteStream(OutputStream);
CloseWriteBuffer;
FreeAndNil(OutputStream);
Disconnect;
end;
end;procedure TMainFrm.Button1Click(Sender: TObject);
var
InputStream:TStringStream;
YWString:WideString;
begin
with idTcpClient1 do
begin
connect;
while connected do
ReadStream(InputStream,-1,true);
SetLength(YWString, InputStream.Size);
InputStream.Read(YWString[1], InputStream.Size);
FreeAndNil(InputStream);
RichEdit1.Lines.Add(YWString);
DisconnectSocket;
Disconnect;
end;
end;上面就是代码,idTcpServer与idTcpClient都已设置好属性,能连通,但采用上面的代码就出错!
控件采用INDY 9.0
ReadStream(InputStream,-1,true);
这句要它干嘛?
begin
connect; //之后最好有个延迟,调用Connect后并不一定立刻连通
while connected do
ReadStream(InputStream,-1,true);
SetLength(YWString, InputStream.Size);
InputStream.Read(YWString[1], InputStream.Size);
FreeAndNil(InputStream);
RichEdit1.Lines.Add(YWString);
DisconnectSocket; //Disconnect考虑去掉,毕竟上面的Execute中已经有Disconnect了
Disconnect;
end;
如你所说,不要服务端的 Disconnect那客户端断开时将报错!To: SuanAddMiao(算苗)
while connected do
ReadStream(InputStream,-1,true);
不要这句,无法读取数据流。
也试过只用ReadStream(InputStream,-1,true); 但还是达不到效果!To: zzllabc(抱朴子--清心释累,绝率忘情)
在connect后延迟也没用!
删不删除DisconnectSocket;这句无关要紧!问题不在这句上!
而在
while connected do
ReadStream(InputStream,-1,true);
ReadStream(InputStream,-1,true)
这句是错误的,建议用
if connected then
ReadStream(InputStream,-1,true);
点击菜单"tools"-->"debugger options"的标签Language exceptions,点击add 输入:
eidconnclosedgracefully 然后点击按钮"ok"就可以了!加分吧!~Q~
这样的操作起什么作用?
还有IndyDemos里面的TCPStreamClientServer我刚才看了,运行完全没有问题呀!