欢迎来到天天文库
浏览记录
ID:30796819
大小:58.00 KB
页数:5页
时间:2019-01-03
《基于tcp的socket连接【delphi版】》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、•用的indy控件:idtcpsrvrl:TTdTCPServer;a)设置默认端口1begin2Seif・btn1.Enabled:二False;3idtcpsrvrl.DefaultPort:=2001;4idtcpsrvrl.Active:=True;5end;b)对客户端连接事件响应1procedureTForml.idtcpsrvrlConnect(AThread:TIdPeerThread);2var3ipStr:string;4begin5ipStr:=AThread.Connection.Socket.Binding.PeerIP;6Sh
2、owMessage(,IP地址为:’+ipStr+'的用户连接过来!’);7end;c)对客户端发送过来的字符串进彳亍显示,并通知客户端接收成功心1procedureTForml.idtcpsrvrlExecute(AThread:TIdPeerThread);2var3str:string;4begin5withAThread.Connectiondo6begin7str:=readln(J',5000);8inc(messageld);9WriteLn(,第’+inttostr(messageld)+,条数据接收成功,内容为:’+str);10end
3、;11end;二Client端Socket:TTdTCPClient;a)指定Server端ip和端口号1begin2Socket:=TTdTCPClient.Create(nil);3Socket.Host:二'127.0.0.1';4Socket.Port:=2001;5end;b)建立连接1ifnotsockct.Connectedthen2begin3try4socket.Connect(5000);5Memol.Lines.Add(,socke连接已经成功建立!’);6btnl.Caption:=,断开连接';7except8ShowMessa
4、ge('连接失败,请检查连接设置!’);9end;10end注:socket连接建立失败的两种情形:1)探测找不到目标主机:此时会等到timeout时间结束后.抛出连接异常2)探测到目标主机,但是目标主机上socket连接未开:立即抛出连接异常c)发送与接收数据1var2RequestStr,BackStr:string;3begin4ifsocket.Connectedthen5begin6RequestStr:='tttttttttttt*;7try8socket.WriteLn(RequestStr);9Memol.Lines.Add(,发送数据:
5、'+RequestStr);10BackStr:=sockct.RcadLn('',5000);//实际上timeout是不起作用的,indy木身11//的bug;此时如果server端无数据则会死等12Memol.Lines.Add(,返回数据:'+BackStr);13except14ShowMessage('发送数据失败!’);15end;16end17else18begin19Memol.Lines.Add(?连接已被断开,无法发送!’);20end;21end;2说明:1)indy的TIdTCPCIient是阻塞式的,程序会停在那里等待接收,故
6、有以下两种读取数据的方式:a)可以单独启一个线程来负责接收b)通过timer来监控是否有新数据到1proceduretimer,ontimer2vartemp:string;3begin4idtcpclient.readfromstack(false,1,false);5whileidtcpclient.InputBuffer.Size〉0dobegin6temp:二idtcpclient.ReadLn;7end;8end;2)如果能知道要取的数据包的大小,可以用readbufferCabuffer,包长度)来取得包。d)断开连接1begin234567
7、89end;trysocket.Disconnect;Memol.Lines.Add('socket连接已断开!);btnl.Caption:=,建立连接';exceptShowMessage('断开连接时出错!');end;
此文档下载收益归作者所有