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 连接不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Websocket握手不起作用

功能 setsockopt 似乎不起作用

socket.io 连接事件不起作用,为啥?

如何从主(winsock)向服务器发送消息?

检查 Internet 连接不起作用

连接移动数据时 Ajax 不起作用