我一直在嘗試發送消息在tcp上,但這些代碼似乎給Delphi 7上的奇怪錯誤,你我在Delphi XE上試過類似的代碼,它工作正常。用印10兩個XE和Delphi林7在Delphi 7中通過TCP發送消息
type
TClient = class(TIdContext)
PeerIP : String;
RcvdMsg : String;
procedure SendResponse(const AResponse: String);
end;
...
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
var
NewClient: TClient;
begin
with TClient(AContext) do
begin
NewClient.PeerIP := Connection.Socket.Binding.PeerIP;
NewClient.RcvdMsg := Connection.Socket.ReadLn;
end;
end;
...
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Context: TClient;
List: TList;
I: Integer;
begin
List := IdTCPServer1.Contexts.LockList;
try
for I := 0 to List.Count-1 do
begin
Context := TClient(List[I]);
MessageBox(0,pChar(Context.PeerIP),0,0); // shows wierd string
(* if (Context.PeerIP = IP) then
begin
//didn't get to here
Context.SendResponse('msg');
Break;
end *)
end;
finally
IdTCPServer1.Contexts.UnlockList;
end;
end;
什麼辦法解決呢?
編輯:
type
TClient = class(TIdServerContext)
PeerIP : String;
RcvdMsg : String;
procedure SendResponse(const AResponse: String);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
IdTCPServer1.Bindings.Add.Port := 1234;
IdTCPServer1.Active := not IdTCPServer1.Active;
IdTCPServer1.ContextClass := TClient;
end;
我仍然無法發送消息。
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Context: TClient;
List: TList;
I: Integer;
begin
List := IdTCPServer1.Contexts.LockList;
try
for I := 0 to List.Count-1 do
begin
Context := TClient(List[I]);
MessageBox(0,pChar(Context.PeerIP),0,0); // blank
(* if (Context.PeerIP = IP) then
begin
//didn't get to here
Context.SendResponse('msg');
Break;
end *)
end;
finally
IdTCPServer1.Contexts.UnlockList;
end;
end;
是輸出真正的「怪異字符串」 ? –
我的意思是奇怪的ascii字符,或者我不知道你們叫什麼 – user1979304