TCP服务器每8ms连续发送一次数据帧.我想编写一个能够接收这些数据帧的客户端.在Indy 9中是否有任何程序知道缓冲区中是否有可用的数据?
我目前的程序如下(我使用的是Thread):
procedure TThreadRead.Execute;
var
buffer: array [0..755] of byte;
//s1: string;
//i: integer;
begin
IdTCPClient1.RecvBufferSize:= 756;
IdTCPClient1.Connect;
while Terminated = false do
begin
if IdTCPClient1.InputBuffer.Size = 0 then
IdTCPClient1.ReadFromStack(True,0,False);
while IdTCPClient1.InputBuffer.Size > 0 do
begin
ReadBuffer(buffer, FClient.InputBuffer.Size);
//s1:= '';
//For i:=0 To Length(buffer)-1 Do
// s1:=s1+IntToHex(Ord(buffer[i]),2); //Read values-->global var
//Form1.Memo1.Text:=s1;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
有没有更有效的解决方案连续读取TCP数据(如UDP中的onread事件)?
提前致谢.
我已经搜索了很多关于这个问题,并且没有关于如何将字符串从delphi dll传递给.NET的明确答案下一代码基于msdn帮助文件:http://msdn.microsoft.com/en-us/库/ 4zey12w5.aspx
//Delphi code
function myDelphiFunc(var Buffer: PChar): Integer; export; stdcall;
Buffer:='this is a test';
Return:=0;
end;
//vb.NET code
<DllImport(path)> _
Public Function myDelphiFunc(ByVal buffer As String) As Integer
Public Sub myNETFunc()
Dim buffer_size As integer = 25
Dim buffer As String = New String(CChar(" "), buffer_size )
Call myDelphiFunc(buffer)
MsgBox(Strings.Left(buffer, InStr(buffer, Chr(0)) - 1))
End Sub
Run Code Online (Sandbox Code Playgroud)
调用myDelphiFunc时,我在"buffer"变量中收到一个空字符串.我究竟做错了什么?
提前致谢
我想从通过UDP向我的PC发送数据的电子设备读取数据.我在Delphi中编写了一个UDP服务器.类EIdSocketError(失败#10049)中发生异常.这是我的代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdUDPServer1.Bindings.add.IP := '192.168.1.1'; //Electronic device ip
IdUDPServer1.Bindings.add.Port:= 49152; //Electronic device port
IdUDPServer1.OnUDPRead:= UDPRead;
IdUDPServer1.Active:=True;
end;
procedure TForm1.UDPRead (Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
bytes_received: integer;
begin
bytes_received:=AData.size;
end;
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
提前致谢