我写了delphi的客户端和服务端。但是客户端在发送完数据之后,就不能接受到服务端发回的消息。请高手指教一下!代码如下:客户端部分:
ClientSocket1.Open;
s := TWinSocketStream.Create(ClientSocket1.Socket, 60000);
// f := TFileStream.Create(OpenDialog1.FileName, fmShareDenyWrite);
sendstr:='abcde';
// move(sendstr^,buff,strlen(sendstr));
CopyMemory(@buff, @sendstr[1], Length(sendstr)); Try
s.Write(buff,length(buff)+1); fillchar(recbuff,sizeof(recbuff),0);
if s.WaitForData(10000) then
begin
s.Read(Recbuff,length(recbuff));
end;服务端部分:While Not Terminated And ClientSocket.Connected Do
Begin
try
SocketStream := TWinSocketStream.Create(ClientSocket, 60000);
// F := TFileStream.Create('c:\afile.exe', fmCreate);
try
FillChar(ReceiveBuffer, sizeof(ReceiveBuffer), 0);
If SocketStream.WaitForData(5000) Then
Repeat
BytesRead := SocketStream.Read(ReceiveBuffer,length(ReceiveBuffer));
s:= ReceiveBuffer;
if BytesRead = 0 then
begin
sendbuff:='123123';
SocketStream.Write(sendbuff,length(sendbuff)+1);
// ClientSocket.Close end
Else
begin
end;
// F.WriteBuffer(ReceiveBuffer, BytesRead);
Until Not SocketStream.WaitForData(2000); finally
SocketStream.Free;
ClientSocket.Close;
// f.Free;
end;
except
end;
End;谢谢啦!
ClientSocket1.Open;
s := TWinSocketStream.Create(ClientSocket1.Socket, 60000);
// f := TFileStream.Create(OpenDialog1.FileName, fmShareDenyWrite);
sendstr:='abcde';
// move(sendstr^,buff,strlen(sendstr));
CopyMemory(@buff, @sendstr[1], Length(sendstr)); Try
s.Write(buff,length(buff)+1); fillchar(recbuff,sizeof(recbuff),0);
if s.WaitForData(10000) then
begin
s.Read(Recbuff,length(recbuff));
end;服务端部分:While Not Terminated And ClientSocket.Connected Do
Begin
try
SocketStream := TWinSocketStream.Create(ClientSocket, 60000);
// F := TFileStream.Create('c:\afile.exe', fmCreate);
try
FillChar(ReceiveBuffer, sizeof(ReceiveBuffer), 0);
If SocketStream.WaitForData(5000) Then
Repeat
BytesRead := SocketStream.Read(ReceiveBuffer,length(ReceiveBuffer));
s:= ReceiveBuffer;
if BytesRead = 0 then
begin
sendbuff:='123123';
SocketStream.Write(sendbuff,length(sendbuff)+1);
// ClientSocket.Close end
Else
begin
end;
// F.WriteBuffer(ReceiveBuffer, BytesRead);
Until Not SocketStream.WaitForData(2000); finally
SocketStream.Free;
ClientSocket.Close;
// f.Free;
end;
except
end;
End;谢谢啦!
begin
sendbuff:='123123';
SocketStream.Write(sendbuff,length(sendbuff)+1);
// ClientSocket.Close end你的代码
服务端是判断接收数据的大小为零时,才发送,条件写错了
if BytesRead > 0 then
begin
sendbuff:='123123';
SocketStream.Write(sendbuff,length(sendbuff)+1);
// ClientSocket.Close end