首先,本人以前做过delphi,但是目前也已经好久没有做了,但是现在公司有一个项目需要用到delphi的通讯.
项目描述:
有一台机器象我的机器的一个端口发送数据,string类型的.我需要监听这个端口,然后获取数据.
请问,我应该使用什么控件?该如何做?希望能够详细些,毕竟本人已经好久不写delphi了.呵呵.
然后,还有,一个机器向我的一个端口发送视频信号,我该如何接受,并显示视频?
两个问题,只要回答,我就給分,解决问题,我另外开贴加分,我一共有可用分1806,总技术分:564,只要能給的,我全部給.
在线等....

解决方案 »

  1.   

    使用TcpServer控件,代码如下:// 设置主机和端口号
    procedure TFormMain.btnSetClick(Sender: TObject);
    begin
    TcpServer.Active := False;
    TcpServer.LocalHost := edtHost.Text;
    TcpServer.LocalPort := edtPort.Text;
    TcpServer.Active := True;
    end;// OnAccept事件
    procedure TFormMain.TcpServer1Accept(sender: TObject;
    ClientSocket: TCustomIpClient);
    var
    s: string;
    begin
    s := ClientSocket.Receiveln;
    mmData.Lines.Append(s);
    end;这样就可以监听到指定的端口,比如说80端口,监听浏览器
      

  2.   

    嗯,谢谢楼上的,这个我已经在网上找到了,也看了.能解释下代码吗?
    // 设置主机和端口号
    procedure TFormMain.btnSetClick(Sender: TObject);
    begin
    TcpServer.Active := False;
    TcpServer.LocalHost := edtHost.Text;//设置IP
    TcpServer.LocalPort := edtPort.Text;//设置监听端口
    TcpServer.Active := True;
    end;// OnAccept事件,这个事件是在端口有数据过来的时候发生的吗?
    procedure TFormMain.TcpServer1Accept(sender: TObject;
    ClientSocket: TCustomIpClient);
    var
    s: string;
    begin
    s := ClientSocket.Receiveln;//这个是传送过来的数据吗?如果我是一种有格式的数据应该如何做?
    mmData.Lines.Append(s);
    end; 不知道我上面的理解对不对,还有,我写了后如何测试呢?"Telnet 127.0.0.1 端口",这样测试?
      

  3.   

    说说我现在的实验成果吧.
    我用上面的代码,加上telnet确实可以监听端口,现在已经获取数据了,然后就是获取视频.我真不了解如何获取视频流
      

  4.   

    谢谢楼上的.
    好的,我先整明白先.我看到网上有视频的方式: 3.2.2在程序窗口Form2上放置一个image控件,该控件用于接收的图像内容,再放置一个Tbutton控件,caption为"接收",,放置一个UDPServer组件,这里用indy的IdUDPServer用来接收网络视频,如图示:  接收按钮代码:IdUDPServer1.DefaultPort:=9001; //接收端口 IdUDPServer1.Active:=true; //启用  IdUDPServer1的UDPRead事件代码:var jpg:TJpegImage;begin try jpg := TJpegImage.Create; jpg.LoadFromStream(Adata); Image1.Picture.Bitmap.Assign(jpg); jpg.Free; exceptend;end;  视频的传输是压缩成JPG进行传输的,服务器端和接收端都用到了jpeg单元,所以use中都要加入jpeg。# unit Unit2;  
    # interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, ExtCtrls,jpeg,IdSocketHandle;  
    # type TForm1 = class(TForm) Image1: TImage;   
    # IdUDPServer1: TIdUDPServer;   
    # Button1: TButton;  
    # procedure Button1Click(Sender: TObject);   
    # procedure IdUDPServer1UDPRead(Sender: TObject;   
    # AData: TStream; ABinding: TIdSocketHandle);   
    # private { Private declarations }  
    # public   
    # {  
    #  Public declarations  
    # }  
    # end;  
    # var Form1: TForm1;  
    # implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);  
    # begin   
    #  IdUDPServer1.DefaultPort:=9001; //接收端口  
    #  IdUDPServer1.Active:=true; //启用  
    # end;  
    # procedure TForm1.IdUDPServer1UDPRead(Sender: TObject;AData: TStream; ABinding: TIdSocketHandle);  
    # var jpg:TJpegImage;  
    # begin   
    #  try  
    #   jpg := TJpegImage.Create;   
    #   jpg.LoadFromStream(Adata);   
    #   Image1.Picture.Bitmap.Assign(jpg);   
    #   jpg.Free;  
    #   except  
    # end;  
    # end;  
    # end.
      

  5.   

    要说传输,鸽子似乎有个把jpg整合成avi的单元,楼主可以去看看
      

  6.   

    其实如何传,并不是我关心的问题,因为传送給我是别人要做的,我这只要负责接收,然后显示就成
    我用了上面的代码,发现IdUDPServer1UDPRead事件的ABinding: TIdSocketHandle提示undeclared identifier:"TIdSocketHandle"
      

  7.   

    N年前用SOCKET写过,不过,代码找不到了
      

  8.   

    视频首先要搞清楚编码格式,jpg只是抓取单帧发送,搞网络视频的一般不会这么做,一般是xvid wmv9 h264 等编码 需要你写一个解码器来实现视频的播放。获取数据无论是winsock还是Indy都沒问题。
      

  9.   

    谢谢ideation_shang,我也想到了这个问题,视频是别人发給我的,我只负责接受,所以还要等那边确定了视频格式.理论上可以实现就不怕.