tcpclient 使用 ( 积分: 100 )

  • 主题发起人 主题发起人 zzs3842
  • 开始时间 开始时间
Z

zzs3842

Unregistered / Unconfirmed
GUEST, unregistred user!
功能:
向服务段发送指令,收到正确的数据,就继续发指令,收到争取的数据就继续发指令,。。。。。。 知道返回的数据为某一个数据 就结束。
问题: 中间有时发送指令后 没有数据返回。不知怎么处理。
源代码如下:请指点
procedure TForm1.Button1Click(Sender: TObject);
begin
tcpclient1.RemoteHost := '192.168.0.178';
tcpclient1.RemotePort := '3003';
sendcommand('15', '');
end;

procedure TForm1.sendcommand(command, data: string);
begin
try
if tcpclient1.Connected = false then tcpclient1.Connect;
if tcpclient1.Connected then
begin
TcpClient1.Sendln(HexStrToStr('06' + leijiahe('00', command, data) + '07'));
memo1.Lines.Add(HexStrToStr('06' + leijiahe('00', command, data) + '07'));
tcpclient1.Receiveln;
end;
finally
//tcpclient1.Disconnect;
end;
end;

procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);
var str: string;
k, i: integer;
begin
str := strtohexstr1(Buf);
memo1.Lines.Add(str);
k := hexstrtoint(copy(str, 11, 4));
case k of
48 + 51: begin
tcpclient1.Disconnect;
showmessage('读取刷卡记录结束!');
end;
48 + 48:
begin
i := hexstrtoint1(copy(str, 7, 4));
case i of
49 * 100 + 53: begin
memo1.Lines.Add(str);
sendcommand('15', '');
end;
end;
end;
end;
end;

procedure TForm1.TcpClient1Error(Sender: TObject; SocketError: Integer);
begin
// TcpClient1.Disconnect;
memo1.Lines.Add('错误:' + inttostr(SocketError));
end;
 
功能:
向服务端发送指令,收到正确的数据,就继续发指令,收到正确的数据就继续发指令,。。。。。。 直到返回的数据为某一个数据 就结束。
问题: 中间有时发送指令后 没有数据返回。不知怎么处理。
源代码如下:请指点
procedure TForm1.Button1Click(Sender: TObject);
begin
tcpclient1.RemoteHost := '192.168.0.178';
tcpclient1.RemotePort := '3003';
sendcommand('15', '');
end;

procedure TForm1.sendcommand(command, data: string);
begin
try
if tcpclient1.Connected = false then tcpclient1.Connect;
if tcpclient1.Connected then
begin
TcpClient1.Sendln(HexStrToStr('06' + leijiahe('00', command, data) + '07'));
memo1.Lines.Add(HexStrToStr('06' + leijiahe('00', command, data) + '07'));
tcpclient1.Receiveln;
end;
finally
//tcpclient1.Disconnect;
end;
end;

procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);
var str: string;
k, i: integer;
begin
str := strtohexstr1(Buf);
memo1.Lines.Add(str);
k := hexstrtoint(copy(str, 11, 4));
case k of
48 + 51: begin
tcpclient1.Disconnect;
showmessage('读取刷卡记录结束!');
end;
48 + 48:
begin
i := hexstrtoint1(copy(str, 7, 4));
case i of
49 * 100 + 53: begin
memo1.Lines.Add(str);
sendcommand('15', '');
end;
end;
end;
end;
end;

procedure TForm1.TcpClient1Error(Sender: TObject; SocketError: Integer);
begin
// TcpClient1.Disconnect;
memo1.Lines.Add('错误:' + inttostr(SocketError));
end;
 
没人用tcpclient么? 这个问题很简单啊
 
我也正在研究这个控件问题,我很希望能给你解决这个问题啊,我的思路是这样的,是不是应该有一个发送请求响应的事件呢,如果得到客户端的响应,那么开始发送数据,否则不发送。不知理解的对不对,呵呵,但是我现在解决不了啊,请看看我的问题吧,谢谢。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3853293
 
咋这么冷清呢?大富翁们 都潜水了?
 
服务器的command肯定对不?
我一般是用readln来读取,然后再判断的!
 
烂控件,不用也罢。
 
tcpclient1.Receiveln; 如果服务段没返回数据的话 就在这一句 停30S 我想缩短时间 咋办?
还有 在发送接收过程中 我要是想终止该咋办,现在发送接收过程中好像死了一样,就是堵塞模式也该有终止的办法啊?请高手赐教!
 
咋没人回应呢
 
用sendtext发送应该没什么问题,我就是这样尝试的
 
Applcation.ProMessage 试试
 
后退
顶部