小编use*_*263的帖子

Indy TCP - 循环读取数据

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事件)?

提前致谢.

tcp indy tcpclient indy-9

3
推荐指数
1
解决办法
9842
查看次数

将字符串从Delphi dll传递到.net

我已经搜索了很多关于这个问题,并且没有关于如何将字符串从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"变量中收到一个空字符串.我究竟做错了什么?

提前致谢

.net vb.net delphi pinvoke

3
推荐指数
1
解决办法
2051
查看次数

使用TIdUDPServer读取数据

我想从通过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)

我究竟做错了什么?

提前致谢

delphi udp indy delphi-7

0
推荐指数
1
解决办法
1万
查看次数

标签 统计

delphi ×2

indy ×2

.net ×1

delphi-7 ×1

indy-9 ×1

pinvoke ×1

tcp ×1

tcpclient ×1

udp ×1

vb.net ×1