我在客户端使用socketconnection连接服务器,服务器端的SOCKET程序应该怎么样设计?
我在服务器放了一个TServerSocket控件,调好端口并开始侦听。能够得到客户端连接的信息,但是客户端确一直没有反应,服务器端是不是还要把TServerSocket和数据库连接在一起啊,如果是,那应该怎样连接?服务器端收到客户端的请求后,是不是还要返回什么信息,客户端才能通过。
急!急!急!急!急!请高手帮帮忙啊。在线等待!!!!!
我在服务器放了一个TServerSocket控件,调好端口并开始侦听。能够得到客户端连接的信息,但是客户端确一直没有反应,服务器端是不是还要把TServerSocket和数据库连接在一起啊,如果是,那应该怎样连接?服务器端收到客户端的请求后,是不是还要返回什么信息,客户端才能通过。
急!急!急!急!急!请高手帮帮忙啊。在线等待!!!!!
解决方案 »
- 如何禁止上网和断开网络?
- 我现在遇到一个有关在图像上画的问题,请有关这方面的高手赐教!!很急需
- 申明了一个结构体,几个域,如果在内存中直接读出这些域.
- installshield professional 6.x
- BCB下有什么好的工具制作资源文件res(想自定义光标文件)
- 寻解决方案?
- 请问:我想在应用程序中实现向纯HTML页面中进行插入一个链接,不知怎样对本地机的纯HTML页面进行定位与编辑操作,请各位提供方案!我没有
- 图的最短路径问题的算法
- quickrep 打印关不了窗口.高手帮我看看
- ------------------------数组排序问题?-----------------------------------
- Quickrep 实现了折行打印但表格“竖线”如何解决自动增减高度????
- 免费电影频道
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;