我在客户端使用socketconnection连接服务器,服务器端的SOCKET程序应该怎么样设计?
   我在服务器放了一个TServerSocket控件,调好端口并开始侦听。能够得到客户端连接的信息,但是客户端确一直没有反应,服务器端是不是还要把TServerSocket和数据库连接在一起啊,如果是,那应该怎样连接?服务器端收到客户端的请求后,是不是还要返回什么信息,客户端才能通过。
   急!急!急!急!急!请高手帮帮忙啊。在线等待!!!!!

解决方案 »

  1.   

    网上找了,关于socketconnection的资料还可以找到一些。但是关于开发SOCKET服务器的资料一点也没有找到啊。
      

  2.   

    为什么要用socket,如果数据量大速度太慢,会让你抓狂,用INDY
    procedure TData_form.DataModuleCreate(Sender: TObject);
    begin
      if FrmMain.Edit1.Text='1' then
        begin
          IdTCPClient1.Host :=FrmRemoteLogin.Edit1.Text;
          IdTCPClient1.Port :=1024;
          try
            IdTCPClient1.Connect;
            IdTCPClient1.Disconnect;
          except
          end;
        end
      else
        begin
          IdThreadMgrPool1.PoolSize := 10;
          IdTCPServer1.DefaultPort := 1024;
          Try
            IdTCPServer1.Active := true;
          except
          end;
        end;
    end;procedure TData_form.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      TempStr: String;
      StrList: TStringList;
      DataSetProvider: TDataSetProvider;
      ClientDataSet: TClientDataSet;
      ADOQuery: TADOQuery;
      AStream: TStringStream;
      i: integer;
    begin
      try
        TempStr := AThread.Connection.ReadLn;
        if AThread.Connection.ReadLnTimedOut then
          begin
            showmessage('-读客户端信息超时-');
          end;
        if Tempstr <> '' then
          begin
            CoInitialize(nil);
            ADOConnection.Open;        ADOQuery := TADOQuery.Create(Nil);
            ADOQuery.Connection := ADOConnection;
            ADOQuery.SQL.Text :=TempStr;
            ADOQuery.Open;        AThread.Connection.WriteInteger(0, True);        DataSetProvider := TDataSetProvider.Create(Nil);
            ClientDataSet := TClientDataSet.Create(Nil);
            DataSetProvider.DataSet := ADOQuery;
            ClientDataSet.Data := DataSetProvider.Data;
            AStream:=TstringStream.Create('');        ClientDataSet.SaveToStream(AStream,dfBinary);
            AThread.Connection.OpenWriteBuffer;
            AThread.Connection.WriteStream(AStream);
            AThread.Connection.CloseWriteBuffer;
            FreeAndNil(AStream);
            ClientDataSet.Close;
            FreeAndNil(ClientDataSet);
            FreeAndNil(DataSetProvider);
            ADOQuery.Close;
            FreeAndNil(ADOQuery);
            ADOConnection.Close;
            CoUnInitialize;
            AThread.Connection.Disconnect;
          end;
      except
      end;
    end;
    ---------------Data_Form.IdTCPClient1.Connect;
                  Data_Form.IdTCPClient1.WriteLn('select * from logs where username='''+username.Text+''' order by datetime');
                  Case Data_form.IdTCPClient1.ReadInteger(True) of
                    0 :
                      begin
                        AStream := TStringStream.Create('');
                        Data_Form.IdTCPClient1.ReadStream(AStream, -1, True);
                        AStream.Seek(0, soFromBeginning);
                        Data_Form.ClientDataSet1.Close;
                        Data_Form.ClientDataSet1.LoadFromStream(AStream);
                        if Data_form.ClientDataSet1.RecordCount<>0 then
                          BEGIN
                            NewlyDrawGrid1.FixedRows:=1;
                          end;
                        for i:=1 to Data_Form.ClientDataSet1.RecordCount do
                          begin
                            newlydrawgrid1.Cells[0,newlydrawgrid1.RowCount-1]:=Data_Form.clientdataset1.fieldbyname('datetime').AsString;
                            newlydrawgrid1.Cells[1,newlydrawgrid1.RowCount-1]:=Data_Form.clientdataset1.fieldbyname('res').AsString;
                            newlydrawgrid1.Cells[2,newlydrawgrid1.RowCount-1]:=Data_Form.clientdataset1.fieldbyname('username').AsString;
                            newlydrawgrid1.RowCount:=newlydrawgrid1.RowCount+1;
                            Data_Form.ClientDataSet1.Next;
                          end;
                        FreeAndNil(AStream);
                      end;
                    -1:
                      begin
                        ShowMessage('未知的请求类型!');
                        exit;
                      end;
                    -2:
                      begin
                        ShowMessage('无可用服务器!');
                        if Data_Form.IdTCPClient1.Connected then
                          Data_Form.IdTCPClient1.Disconnect;
                        exit;
                      end;
                  end;
                  newlydrawgrid1.RowCount:=newlydrawgrid1.RowCount-1;
              end;
      

  3.   

    dephi自身的demos中有啊,可以看一下
      

  4.   

    >>我在客户端使用socketconnection连接服务器,服务器端的SOCKET程序应该怎么样设计?如果你要用Socket 通信, 不是用 socketconnection 來聯接 TServerSocket, TServerSocket 對應 TClientSocket 的!!!
      

  5.   

    我是用socketconnection来做数据库方面的软件的,主要不是做通信的。请问应该怎么做啊?
      

  6.   

    软件都快要完成了,现在我一直都使用管家婆中带的SOCKET服务器。我想自己搞一个,然后跟软件绑定起来。请高手们帮帮忙啊。
      

  7.   

    若是用socketconnection连服务器,服务器不用TServerSocket的,注册一下服务程序或是运行一次,(注册midas.dll先)设好socketconnection的hostname,在severname属性中就能找到服务了
      

  8.   

    服务器如果不运行SOCKET服务,那就不能与服务器程序连接成功。DCOM是可以直接与服务器连接的。请各位高手帮帮忙,SOCKET服务器程序应该怎么样做。实在是急啊。