Winsock 连接不起作用
Posted
技术标签:
【中文标题】Winsock 连接不起作用【英文标题】:Winsock connection does not work 【发布时间】:2015-05-29 08:08:48 【问题描述】:我使用的是 Delphi 2007。在我的 Delphi 应用程序中,我需要通过端口和 IP 发送一个字符串,并且接收方必须向我发送一个答案。
我已经创建了这段代码,但我不确定我是否真的做对了,因为我没有收到任何答案:
procedure TForm1.Button1Click(Sender: TObject);
var port:integer;
begin
port:=StrToInt(edit4.text);
ClientSocket1.Port:=21000;
ClientSocket1.Host:=Edit3.text;
ClientSocket1.ClientType:=ctNonBlocking;
ClientSocket1.Active:=true;
ClientSocket1.Connect.
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket:CustomWinSocket);
begin
Checkbox1.Checked:=true;
Edit1.Text:=Socket.LocalAddress;
Edit2.Text:=Socket.LocalHost;
Memo2.Lines.Clear;
Edit5.Text:='STX ~ JR | ETX';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ClientSocket1.Active then
ClientSocket1.Socket.SendText(Edit5.text)
else
Memo1.Lines.Add('Not working');
end;
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: CustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;
在单击第二个按钮之前,我如何确定自己仍然处于连接状态? (发送数据的人)。
抱歉我的英语不好,如果我违反了任何规则,我们深表歉意。
【问题讨论】:
旁注,TClient/TServersocket 是真正的旧组件,没有更新。最好看看Indy component suite。 总是提到你的delphi版本。 这看起来很可疑:Edit5.Text:='Chr($H2) + Chr($H7E) + "JR" + Chr($H7C) + Chr($H3)';
和 ClientSocket1.Socket.SendText(Edit5.text)
。接收者是否真的期望包含所有Chr
、parens、plusses、双引号等的文字字符串,或者它实际上期望六个字符#$02 + #$7E + 'J' + 'R' + #$7C + #$03
? Delphi 中的十六进制表示法只使用$
,没有使用H
。字符#
表示一个字符值。
是的,好吧,那是我尝试的最后一件事,我也尝试过 strng 是“STX ~ JR | ETX” 我正在使用 Delphi 2007 顺便说一句
那个字符串看起来仍然不正确。它会发送一个“S”,然后是一个“T”,然后是一个“X”等。我相信这不是你的意思。请按照 Tom BrunBerg 的建议尝试 Edit5.Text := #$02 + #$7E + 'J' + 'R' + #$7C + #$03
【参考方案1】:
在单击第二个按钮之前,我如何确定自己仍然处于连接状态? (发送数据的人)。
在您的代码中,您在连接 ClientSocket1 时设置了 CheckBox1.Checked := true
。
因此,您可以在使用 ClientSocket1.OnDisconnect
事件断开连接时将相同的复选框设置为 false。
ClientSocket1Disconnect 在连接断开时自动触发。
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Checkbox1.Checked:=false;
end;
现在你可以使用 CheckBox1 作为ClientSocket1
是否连接的指示器。
【讨论】:
以上是关于Winsock 连接不起作用的主要内容,如果未能解决你的问题,请参考以下文章