procedure TForm2.Button2Click(Sender: TObject);
Var
I: integer;
AContext: TIdContext;
begin
for I := 0 to IdTCPServer1.Contexts.LockList.Count - 1 do
Begin
AContext := TIdContext(IdTCPServer1.Contexts.LockList.Items[I]);
AContext.Connection.IOHandler.Write('A');
End;
end;
procedure TForm2.Button2Click(Sender: TObject);
Var
I: integer;
AContext: TIdContext;
begin
for I := 0 to IdTCPServer1.Contexts.LockList.Count - 1 do
Begin
try ////添加try來過濾某些錯誤
AContext := TIdContext(IdTCPServer1.Contexts.LockList.Items[I]);
AContext.Connection.IOHandler.Write('A');
finally
AContext.Connection.UnlockList; ////這里要解鎖!!!
End;
end;
uj5u.com熱心網友回復:
怪異的,idtcpclient的onwork事件不會觸發,客戶端要用個執行緒不斷readln
uj5u.com熱心網友回復:
你服務端有沒有在OnRead事件中寫回應?
procedure TForm2.IdTCPServer1Execute(AContext: TIdContext);
Var
Hb: TIdIOHandler;
TempStr: TStrings;
begin
Hb := AContext.Connection.IOHandler;
if Not Hb.InputBufferIsEmpty then
Begin
Hb.CheckForDisconnect(True, True);
Hb.ReadStream(RStream, Hb.InputBuffer.Size);
TempStr := TStringList.Create;
RStream.Position := 0;
TempStr.LoadFromStream(RStream);
Memo1.Lines.AddStrings(TempStr);
TempStr.Free;
RStream.Clear;
End;
Sleep(100);
end;
procedure TForm2.Button2Click(Sender: TObject);
Var
I: integer;
AContext: TIdContext;
begin for I := 0 to IdTCPServer1.Contexts.LockList.Count - 1 do //此處是不是沒有unlock
Begin
AContext := TIdContext(IdTCPServer1.Contexts.LockList.Items[I]);
AContext.Connection.IOHandler.Write('A');
End;
end;
這是這樣用服務端發送訊息的
是不是沒有unlock
uj5u.com熱心網友回復:
你服務端有沒有在OnRead事件中寫回應?
procedure TForm2.IdTCPServer1Execute(AContext: TIdContext);
Var
Hb: TIdIOHandler;
TempStr: TStrings;
begin
Hb := AContext.Connection.IOHandler;
if Not Hb.InputBufferIsEmpty then
Begin
Hb.CheckForDisconnect(True, True);
Hb.ReadStream(RStream, Hb.InputBuffer.Size);
TempStr := TStringList.Create;
RStream.Position := 0;
TempStr.LoadFromStream(RStream);
Memo1.Lines.AddStrings(TempStr);
TempStr.Free;
RStream.Clear;
End;
Sleep(100); //此處sleep會使主執行緒掛起,記住IdTcpServer不是繼續自TThread的
end;
這是我服務端的代碼,服務端接收沒問題
關鍵是如果用服務端發送的話 那其它新打開的客戶端就會連接不上
為什么要發Stream,為什么直接發字串?
uj5u.com熱心網友回復:
procedure TForm2.Button2Click(Sender: TObject);
Var
I: integer;
AContext: TIdContext;
begin
for I := 0 to IdTCPServer1.Contexts.LockList.Count - 1 do
Begin
try ////添加try來過濾某些錯誤
AContext := TIdContext(IdTCPServer1.Contexts.LockList.Items[I]);
AContext.Connection.IOHandler.Write('A');
finally
AContext.Connection.UnlockList; ////這里要解鎖!!!
End;
end;
正解
uj5u.com熱心網友回復:
procedure TForm2.Button2Click(Sender: TObject);
Var
I: integer;
AContext: TIdContext;
AList : TList;
begin
try ////添加try來過濾某些錯誤
AList := IdTCPServer1.Contexts.LockList;
for I := 0 to ALockList.Count - 1 do
Begin
AContext := TIdContext(AList.Items[I]);
AContext.Connection.IOHandler.Write('A');
end;
finally
AContext.Connection.UnlockList; ////這里要解鎖!!!
End;
end;
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......