收录日期:2021/01/17 15:08:16 时间:2016/05/30 03:26:31 标签:VCL组件开发及应用
//*********************************服务端*************************************
type
  TClientThread = class(TServerClientThread)
  private
    { Private declarations }
  protected
    procedure ClientExecute; override;
  public
    Constructor Create(Sender:TObject;var MyWinsock:TServerClientWinSocket); Virtual;
  end;

procedure TMainFrm.ServerSocket1GetThread(Sender: TObject;
  ClientSocket: TServerClientWinSocket;
  var SocketThread: TServerClientThread);
begin
  SocketThread:=TClientThread.Create(Self, Clientsocket);
end;

procedure TClientThread.ClientExecute;
var
  InputStream:TWinSocketStream;
  OutputStream:TWinSocketStream;
  ReceiveBuffer : Array[1..1024] Of Char;
begin
  while not Terminated and ClientSocket.Connected do
    begin
      Try
        InputStream := TWinSocketStream.Create(ClientSocket, MaxTimeOut);
        Try
          FillChar(ReceiveBuffer, sizeof(ReceiveBuffer), 0);
          While InputStream.WaitForData(MaxTimeOut) do
            begin
               BytesRead := InputStream.Read(ReceiveBuffer,SizeOf(ReceiveBuffer));
               if BytesRead = 0 then
                 ClientSocket.Close
               else begin
                 //收到客户端的信息后,服务端发送回复信息。
                 OutputStream := TWinSocketStream.Create(ClientSocket, 60000); 
                 ReceiveD:=TStringstream.Create('收到客户端信息');
                 OutputStream.CopyFrom(ReceiveD,0);
                 //这样写对吗?
               end;
            end;
        Finally
          InputStream.Free;
          ClientSocket.Close;
        End;
      Except
      End;
    end;
end;

//**********************客户端**********************************
procedure TfrmLogin.cmd_OKClick(Sender: TObject);
var
  OutStream, InputStream:TWinSocketStream;
  ReceiveBuffer : TStringstream;
  ReceiveD: array[0..1023]of char;
  BytesRead:integer;
begin
  OutStream := TWinSocketStream.Create(ClientSocket1.Socket, 60000);
  InputStream:= TWinSocketStream.Create(ClientSocket1.Socket, 60000);
  UnitID:='0350';
  ReceiveBuffer:=TStringstream.Create('用户请求身份检查');
  try
    //向服务端发送信息。
    OutStream.CopyFrom(ReceiveBuffer,0);

    //开始从服务端接收数据。
    FillChar(ReceiveD, sizeof(ReceiveD), 0);
    While InputStream.WaitForData(MaxTimeOut) do
      begin
        BytesRead := InputStream.Read(ReceiveD,SizeOf(ReceiveD));
        if BytesRead = 0 then
          Break
        else
          RichEdit1.Lines.Add(ReceiveD);
      end;  
  finally
    OutStream.Free;
    InputStream.Free;
    ReceiveBuffer.Free;
    ClientSocket1.Close;
  end;
end;

现在问题是:
  服务端能接收从客户端传来的信息,客户端却不能从服务端接收数据!
 特把代码贴出来,大家帮忙看一下,是服务端发送数据有问题,还是客户端接收数据有问题!
ding
你首先检查一下你的Server端的数据发出来了没有,没有发出来当然收不到哦
给客户端发给服务端的串后里跟些字符作结束符吧,
不然服务端怎么知道客户端发多少字符?

如何在SQL語句select中加判斷? 成都-招聘.net MIS管理系统开发工程师 为什么DataGrid只显示SQL SERVER数据库中DateTime类型的日期部分 如何重载>>???在线等待急!!!!!!!!! 求文字滤镜效果 为什么winform的DataGrid只显示SQL SERVER数据库中DateTime类型的日期部分 请问谁有WMI SDK(WMI 软件开发包)啊? 想用c++bulder做一个计算器,请教高手。 sql语句错误? ie6上可以进行调试,升级成ie7就提示无法在Web 服务器上启动调试! 做网站,ASP.NET的优势在哪?怎么有人说ASP更方便,更快啊? 请教一个问题: jdbc连接时的疑问?急!急!急! (急求)如何用DOS命令实现远程的下载?? 新ID报到,散10分庆祝... 今晚去同网友约会,可能........ 问两个问题? 急,幫忙 100分,做作业,C++ & OpenGL。紧急!!! 两栏报表如何制作? 真的糊涂了兼郁闷了 一个正则表达式问题,请高手帮忙解决 有誰知道怎麼隱藏硬盤 100分求: 数据汇总解决办法,急等高手!!!! 如何Response.Redirect新的页面到指定的框架中 多线程如何调试啊 这样的复杂报表如何做?高分求解具体思路 为什么我做的VB程序拿到其他机子上就不能正常加载? 一个二维数组问题! 请教一个编码规范的问题