我用 TServerSocket,TClientSocket (D7)来发送与接收信息,
希望功能是:每次发送信息前 ClientSocket.open, SendText 后 ClientSocket.Close;
可奇怪的是:程序启动后的第一次发送总不能成功,之后的每次发送都能成功
。不知道为什么。服务器端(stNonBlocking;Port := 3369):OnClientRead 事件
procedure TfrmMonitor.srvMonitorClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Len:integer;
MfromClient,: string;
begin
MfromClient := Socket.ReceiveText;
Beep;
end;//Client 端
procedure TfrmClient.btnMtoSendClick(Sender: TObject); //发送信息按钮
var
MtoSend: string;
begin cltMtoSend.Address := '192.168.0.222';
cltMtoSend.Port := 3369;
cltMtoSend.Open; MToSend := 'Test! Test!';
cltMtoSend.Socket.SendText(MtoSend); cltMtoSend.Close;
end;
希望功能是:每次发送信息前 ClientSocket.open, SendText 后 ClientSocket.Close;
可奇怪的是:程序启动后的第一次发送总不能成功,之后的每次发送都能成功
。不知道为什么。服务器端(stNonBlocking;Port := 3369):OnClientRead 事件
procedure TfrmMonitor.srvMonitorClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Len:integer;
MfromClient,: string;
begin
MfromClient := Socket.ReceiveText;
Beep;
end;//Client 端
procedure TfrmClient.btnMtoSendClick(Sender: TObject); //发送信息按钮
var
MtoSend: string;
begin cltMtoSend.Address := '192.168.0.222';
cltMtoSend.Port := 3369;
cltMtoSend.Open; MToSend := 'Test! Test!';
cltMtoSend.Socket.SendText(MtoSend); cltMtoSend.Close;
end;
var
m: integer
MtoSend: string;
begin cltMtoSend.Address := '192.168.0.222';
cltMtoSend.Port := 3369;
cltMtoSend.Open; m := 0;
while m = 0 do
Delay(1000); //自定义延时函数
MToSend := 'Test! Test!';
m := cltMtoSend.Socket.SendText(MtoSend);
Memo1.Lines.Add('返回代码:' + IntToStr(m));
end;
cltMtoSend.Close;
end;
返回代码一直是零,但如果之前已经联接并断开过一次就正常.
cltMtoSend.Socket.SendText(MtoSend);放在OnConnect事件里发送。