GetPrivateProfileString('DelphiDBServer','Database_Server_Port','',Cfg_String,MAX_PATH,PCHAR(Cfg_FileName));
if Cfg_String='' then
begin
Cfg_String := '1433';
WritePrivateProfileString('DelphiDBServer','Database_Server_Port',Cfg_String,PCHAR(Cfg_FileName));
end;
DB_Server_Port := Cfg_string;
//2. 用戶名
GetPrivateProfileString('DelphiDBServer','Database_Username','',Cfg_String,MAX_PATH,PCHAR(Cfg_FileName));
if Cfg_String='' then
begin
Cfg_String := 'username';
WritePrivateProfileString('DelphiDBServer','Database_Username',Cfg_String,PCHAR(Cfg_FileName));
end;
DB_Username := Cfg_string;
//3. 密碼
GetPrivateProfileString('DelphiDBServer','Database_Password','',Cfg_String,MAX_PATH,PCHAR(Cfg_FileName));
if Cfg_String='' then
begin
Cfg_String := 'password';
WritePrivateProfileString('DelphiDBServer','Database_Password',Cfg_String,PCHAR(Cfg_FileName));
end;
DB_Password := Cfg_string;
//4. 資料庫名稱
GetPrivateProfileString('DelphiDBServer','Database_Name','',Cfg_String,MAX_PATH,PCHAR(Cfg_FileName));
if Cfg_String='' then
begin
Cfg_String := 'dbname';
WritePrivateProfileString('DelphiDBServer','Database_Name',Cfg_String,PCHAR(Cfg_FileName));
end;
DB_Name := Cfg_string;
//5. 服務器程式 監聽埠
GetPrivateProfileString('DelphiServer','Listening_Port','',Cfg_String,MAX_PATH,PCHAR(Cfg_FileName));
if Cfg_String='' then
begin
Cfg_String := '80';
WritePrivateProfileString('DelphiServer','Listening_Port',Cfg_String,PCHAR(Cfg_FileName));
end;
TCP_Listenning_Port := Cfg_string;
TcpServer1.LocalPort:= TCP_Listenning_Port;
GetPrivateProfileString('DelphiServer','TimeOut','',Cfg_String,MAX_PATH,PCHAR(Cfg_FileName));
if Cfg_String='' then
begin
Cfg_String := '0';
WritePrivateProfileString('DelphiServer','TimeOut',Cfg_String,PCHAR(Cfg_FileName));
end;
Beats_TimeOut := StrtoInt(Cfg_string);
GetPrivateProfileString('DelphiServer','ReTime','',Cfg_String,MAX_PATH,PCHAR(Cfg_FileName));
if Cfg_String = '' then
begin
Cfg_String := '06:20:01';
WritePrivateProfileString('DelphiServer','ReTime',Cfg_String,PCHAR(Cfg_FileName));
end;
Fwzqdsj:=strtodatetime(Cfg_String);
LastTickCount:real; //系統tick
Timeout_time:Integer; //超時 ms
CurTime:TDATETIME;
iKYE:currency;
iPrice:currency;
iXFnum:Integer;
xScreen,yScreen:integer;
begin
if not Assigned(myClientSocket) then
Exit;
if not myClientSocket.Active then
Exit;
//判斷address是否存在sbcx
if Form1.MyQueryOpen(AdoQuery_1,'select * from "sbcs" where sbip='''+myClientSocket.RemoteHost+''' and JSJM='''+Form1.MyComputerName+'''',true)=0 then
begin //不存在
strLog := '資料庫中找不到'+myClientSocket.RemoteHost+'對應的設備記錄,連接被拒絕。';
synchronize(AddLog);
AdoQuery_1.Close;
AdoQuery_2.Close;
myClientSocket.Close;
ci:=ci-1;
exit;
end
else
begin
strLog := '設備'+myClientSocket.RemoteHost+'已連接到服務器。['+myClientSocket.RemotePort+']'+inttostr(ci);
synchronize(AddLog);
//判斷設備是否已在串列中
with AdoQuery_1 do
begin
First;
sbipStr:=FieldByName('sbip').AsString;
jhStr:=FieldByName('jh').AsString;
idStr:=FieldByName('id').AsString;
iOnline:=2;
Form1.UpdateDevInListView(idStr,IntToStr(iOnline),sbipStr,jhStr);
end;
end;
LastTickCount :=GetTickCount;
Timeout_time := Form1.Beats_TimeOut*1000;
ZeroMemory(@RecvBUF[0],SizeOf(RecvBUF));
if (Assigned(myClientSocket) and not (myClientSocket.Active) and not (myClientSocket.Connected)) then
begin
myClientSocket.Free;
exit;
end;
while (Assigned(myClientSocket) and (myClientSocket.active) and (myClientSocket.Connected)) do
begin
if Timeout_time>0 then
begin
if GetTickCount-LastTickCount>Timeout_time then
begin
if(iOnline<>1) then
begin
if (iOnline>2) then
Form1.UpdateDevInListView(idStr,'1',sbipStr,jhStr);
iOnline:=1;
end;
break;
end;
if myClientSocket.WaitForData(Timeout_time)=False then
begin
if(iOnline<>1) then
begin
if (iOnline>2) then
Form1.UpdateDevInListView(idStr,'1',sbipStr,jhStr);
iOnline:=1;
end;
break;
end;
end;
ZeroMemory(@RecvBUF[0],SizeOf(RecvBUF));
//接收資料
if(myClientSocket.ReceiveBuf(RecvBUF,SizeOf(RecvBUF))<=0) then
continue;
if RecvBUF[0]=#0 then
continue;
//bufstr:=RecvBuF;
xScreen:=0;
yScreen:=0;
//決議報文
retstr1:=GetValueFromPacket(RecvBUF,'CID');
if Assigned(myClientSocket) then
myClientSocket.Close;
end;
end;
//添加到日志視窗
procedure TMyClientHandleThread.AddLog;
begin
Form1.AddLogInfo(strLog);
end;
//接受新的client連接時
procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
begin
MyClientHandleThreadFunc(ClientSocket);
end;
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......