首先,本人以前做过delphi,但是目前也已经好久没有做了,但是现在公司有一个项目需要用到delphi的通讯.
项目描述:
有一台机器象我的机器的一个端口发送数据,string类型的.我需要监听这个端口,然后获取数据.
请问,我应该使用什么控件?该如何做?希望能够详细些,毕竟本人已经好久不写delphi了.呵呵.
然后,还有,一个机器向我的一个端口发送视频信号,我该如何接受,并显示视频?
两个问题,只要回答,我就給分,解决问题,我另外开贴加分,我一共有可用分1806,总技术分:564,只要能給的,我全部給.
在线等....
项目描述:
有一台机器象我的机器的一个端口发送数据,string类型的.我需要监听这个端口,然后获取数据.
请问,我应该使用什么控件?该如何做?希望能够详细些,毕竟本人已经好久不写delphi了.呵呵.
然后,还有,一个机器向我的一个端口发送视频信号,我该如何接受,并显示视频?
两个问题,只要回答,我就給分,解决问题,我另外开贴加分,我一共有可用分1806,总技术分:564,只要能給的,我全部給.
在线等....
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端口,监听浏览器
// 设置主机和端口号
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 端口",这样测试?
我用上面的代码,加上telnet确实可以监听端口,现在已经获取数据了,然后就是获取视频.我真不了解如何获取视频流
好的,我先整明白先.我看到网上有视频的方式: 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.
我用了上面的代码,发现IdUDPServer1UDPRead事件的ABinding: TIdSocketHandle提示undeclared identifier:"TIdSocketHandle"