说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何做局域网中的机子通讯

编辑:说三道四文库 发布时间:2017-11-24 08:06
HTML文档下载 WORD文档下载 PDF文档下载
我想在局域网中某服务器上做个程序,每隔一定时间就发送一个报文给网中的另一客户机,如客户机的那程序工作正常,则返回一个正确的报文,若工作不正常或已经被终结程序,则返回错误的报文。我该怎么做。因我从未做过网络方面的程序,最好哪位大侠能给点代码参考。
用TCPClielt和TCPServer, 其实Delphi自己有个例子程序,将的是socket连接的.
其实网上带源码的这类软件很多。
给你一个网址上面就有n多。


www.playicq.com
做一个类似聊天室的程序, Server定时向Client发送一个字符串, client收到字符串后进行分析, 如果是指定的命令, 就向Server回应现在的状态. 
用Delphi的Indy页的控件写
用WinSock
这篇文章你看一下吧,说不定对你有所启发

DELPHI实现远程屏幕抓取   
在网络管理中,有时需要通过监视远程计算机屏幕来了解网上微机的使用情况。虽然,市面上有很多软件可以实现该功能,有些甚至可以进行远程控制,但在使用上缺乏灵活性,如无法指定远程计算机屏幕区域的大小和位置,进而无法在一屏上同时监视多个屏幕。其实,可以用Delphi自行编制一个灵活的远程屏幕抓取工具,简述如下。

---- 一、软硬件要求。
---- Windows95/98对等网,用来监视的计算机(以下简称主控机)和被监视的计算机(以下简称受控机)都必须装有TCP/IP 协议,并正确配置。如没有网络,也可以在一台计算机上进行调试。

---- 二、实现方法。
---- 编制两个应用程序,一个为VClient.exe,装在受控机上,另一个为VServer.exe,装在主控机上。VServer.exe指定要监视的受控机的IP地址和将要在受控机屏幕上抓取区域的大小和位置,并发出屏幕抓取指令给VClient.exe,VClient.exe得到指令后,在受控机屏幕上选取指定区域,生成数据流,将其发回主控机,并在主控机上显示出抓取区域的BMP图象。由以上过程可以看出,该方法的关键有二:一是如何在受控机上进行屏幕抓取,二是如何通过TCP/IP协议在两台计算机中传输数据。

---- UDP(User Datagram Protocol,意为用户报文协议)是Internet上广泛采用的通信协议之一。与TCP协议不同,它是一种非连接的传输协议,没有确认机制,可靠性不如TCP,但它的效率却比TCP高,用于远程屏幕监视还是比较适合的。同时,UDP控件不区分服务器端和客户端,只区分发送端和接收端,编程上较为简单,故选用UDP协议,使用Delphi 4.0提供的TNMUDP控件。

---- 三、创建演示程序。
---- 第一步,编制VClient.exe文件。新建Delphi工程,将默认窗体的Name属性设为"Client"。加入TNMUDP控件,Name属性设为"CUDP";LocalPort属性设为"1111",让控件CUDP监视受控机的1111端口,当有数据发送到该口时,触发控件CUDP的OnDataReceived事件;RemotePort属性设为"2222",当控件CUDP发送数据时,将数据发到主控机的2222口。

---- 在implementation后面加入变量定义
const BufSize=2048;{ 发送每一笔数据的缓冲区大小 }
var
BmpStream:TMemoryStream;
LeftSize:Longint;{ 发送每一笔数据后剩余的字节数 }
为Client的OnCreate事件添加代码:
procedure TClient.FormCreate(Sender: TObject);
begin
BmpStream:=TMemoryStream.Create;
end;
为Client的OnDestroy事件添加代码:
procedure TClient.FormDestroy(Sender: TObject);
begin
BmpStream.Free;
end;
为控件CUDP的OnDataReceived事件添加代码:
procedure TClient.CUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String);
var
CtrlCode:array[0..29] of char;
Buf:array[0..BufSize-1] of char;
TmpStr:string;
SendSize,LeftPos,TopPos,RightPos,BottomPos:integer;
begin
CUDP.ReadBuffer(CtrlCode,NumberBytes);{ 读取控制码 }
if CtrlCode[0]+CtrlCode[1]+CtrlCode[2]+CtrlCode[3]='show' then
begin { 控制码前4位为"show"表示主控机发出了抓屏指令 }
if BmpStream.Size=0 then { 没有数据可发,必须截屏生成数据 }
begin
TmpStr:=StrPas(CtrlCode);
TmpStr:=Copy(TmpStr,5,Length(TmpStr)-4);
LeftPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1));
TmpStr:=Copy(TmpStr,Pos(':',TmpStr)+1,Length(TmpStr)-Pos(':',TmpStr));
TopPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1));
TmpStr:=Copy(TmpStr,Pos(':',TmpStr)+1,Length(TmpStr)-
Pos(':',TmpStr));
RightPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1));
BottomPos:=StrToInt(Copy(TmpStr,Pos(':',TmpStr)+1,Length(TmpStr)-Pos(':',TmpStr)));
ScreenCap(LeftPos,TopPos,RightPos,BottomPos); {截取屏幕 }
end;
if LeftSize>BufSize then SendSize:=BufSize
else SendSize:=LeftSize;
BmpStream.ReadBuffer(Buf,SendSize);
LeftSize:=LeftSize-SendSize;
if LeftSize=0 then BmpStream.Clear;{ 清空流 }
CUDP.RemoteHost:=FromIP; { FromIP为主控机IP地址 }
CUDP.SendBuffer(Buf,SendSize); { 将数据发到主控机的2222口 }
end;
end;
其中ScreenCap是自定义函数,截取屏幕指定区域,
代码如下:
procedure TClient.ScreenCap(LeftPos,TopPos,
RightPos,BottomPos:integer);
var
RectWidth,RectHeight:integer;
SourceDC,DestDC,Bhandle:integer;
Bitmap:TBitmap;
begin
RectWidth:=RightPos-LeftPos;
RectHeight:=BottomPos-TopPos;
SourceDC:=CreateDC('DISPLAY','','',nil);
DestDC:=CreateCompatibleDC(SourceDC);
Bhandle:=CreateCompatibleBitmap(SourceDC,
RectWidth,RectHeight);
SelectObject(DestDC,Bhandle);
BitBlt(DestDC,0,0,RectWidth,RectHeight,SourceDC,
LeftPos,TopPos,SRCCOPY);
Bitmap:=TBitmap.Create;
Bitmap.Handle:=BHandle;
BitMap.SaveToStream(BmpStream);
BmpStream.Position:=0;
LeftSize:=BmpStream.Size;
Bitmap.Free;
DeleteDC(DestDC);
ReleaseDC(Bhandle,SourceDC);
end;
存为"C:.pas"和"C:.dpr"并编译。
 
第二步,编制VServer.exe文件。新建Delphi工程,将窗体的Name属性设为"Server"。加入TNMUDP控件,Name属性设为"SUDP";LocalPort属性设为"2222",让控件SUDP监视主控机的2222端口,当有数据发送到该口时,触发控件SUDP的OnDataReceived事件;RemotePort属性设为"1111",当控件SUDP发送数据时,将数据发到受控机的1111口。加入控件Image1,Align属性设为"alClient";加入控件Button1,Caption属性设为"截屏";加入控件Label1,Caption属性设为"左:上:右:下";加入控件Edit1,Text属性设为"0:0:100:100";加入控件Label2,Caption属性设为"受控机IP地址";加入控件Edit2,Text属性设为"127.0.0.1";

在implementation后面加入变量定义

const BufSize=2048;
var
RsltStream,TmpStream:TMemoryStream;
为Server的OnCreate事件添加代码:
procedure TServer.FormCreate(Sender: TObject);
begin
RsltStream:=TMemoryStream.Create;
TmpStream:=TMemoryStream.Create;
end;
为Client的OnDestroy事件添加代码:
procedure TServer.FormDestroy(Sender: TObject);
begin
RsltStream.Free;
TmpStream.Free;
end;
为控件Button1的OnClick事件添加代码:
procedure TServer.Button1Click(Sender: TObject);
var ReqCode:array[0..29] of char;ReqCodeStr:string;
begin
ReqCodeStr:='show'+Edit1.Text;
StrpCopy(ReqCode,ReqCodeStr);
TmpStream.Clear;
RsltStream.Clear;
SUDP.RemoteHost:=Edit2.Text;
SUDP.SendBuffer(ReqCode,30);
end;
为控件SUDP的OnDataReceived事件添加代码:
procedure TServer.SUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String);
var ReqCode:array[0..29] of char;ReqCodeStr:string;
begin
ReqCodeStr:='show'+Edit1.text;
StrpCopy(ReqCode,ReqCodeStr);
SUDP.ReadStream(TmpStream);
RsltStream.CopyFrom(TmpStream,NumberBytes);
if NumberBytes< BufSize then { 数据已读完 }
begin
RsltStream.Position:=0;
Image1.Picture.Bitmap.LoadFromStream(RsltStream);
TmpStream.Clear;
RsltStream.Clear;
end
else
begin
TmpStream.Clear;
ReqCode:='show';
SUDP.RemoteHost:=Edit2.Text;
SUDP.SendBuffer(ReqCode,30);
end;
end;
存为"C:.pas"和"C:.dpr",并编译。

---- 四、测试。
---- 1、本地机测试:在本地机同时运行Vserver.exe和VClient.exe,利用程序的默认设置,即可实现截屏。查看"控制面板"-"网络"-"TCP/IP"-"IP地址",将程序的"客户IP地址"设为该地址,同样正常运行。
---- 2、远程测试:选一台受控机,运行VClient.exe;另选一台主控机,运行VServer.exe,将"受控机IP地址"即Edit2的内容设为受控机的IP地址,"截屏"即可。以上简要介绍了远程屏幕抓取的实现方法,至于在主控机上一屏同时监视多个受控机,读者可自行完善。以上程序,在Windows98对等网下调试通过。  
 
我调试过了,可以运行的,如果有什么问题与我联系:QQ:27201552
用TNMUDP控件看看,用用TCPClielt和TCPServer也行,如果连接成功有事件统治,断开也有事件通知!!
2014情人节没活动?我们来帮你! Windows 8授权销售已超过2亿份 速度不及Win 7 IDC:2013年第四季度Windows Phone出货量大幅增长 深入思考SDN的核心本质:从SDN=OpenFlow回到软件定义网络 谷歌、VMware在Chromebooks上双赢了,微软你怎么看? Tizen真要来了!又有15家IT大佬成帮会成员 研发周报:开源世界应该致谢的五家公司 Square、LinkedIn、Google... 看国外巨头如何“绑架”用户? 一周消息树:5.5寸屏幕的iPhone 6概念机来袭、索契冬奥会开幕式现Bug 一周热点:美国大学生数学建模分析,Hadoop不是万能,探访雅虎数据中心 Google Play services 4.2全球推送,完全支持Chromecast! 移动周报:最快的Web开发IDE——HBuilder Google Glass是空有噱头还是实用品? 服务好“最后一公里”,高效CDN架构经验 “义军”突起,帮用户夺回大数据控制权 为安全,Google收购基于超声波密码验证技术公司SlickLogin 2014 Shenzhen Maker Faire:国内顶级创客聚会即将举行 若无创新,智能手机将是死路一条 任道远上任VMware中国研发中心总经理 Windows免费,微软方能解救PC市场 Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解 将会出现iCar?苹果应该收购特斯拉的七大原因 广大程序员的福音:Bing Code Search扩展助你方便查找代码 深挖线下价值是当前婚恋交友网站获取盈利的突破点 15个最好的Bootstrap设计工具推荐 Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】 Webix 1.5发布:一个强大的JavaScript UI组件库 四大著名风投:在我们眼中只有技术革新 美女CEO谈AWS:是香水还是毒药 国外一学生发明新计算机系统,用微芯片代替硬盘 《近匠》第12期:Yeelink——智能硬件云服务 怎样通过DBNavigator实现对DBGrid 中的记录末添加记录? 啊,注册tucows,downloads.com都要收费的?是吗 怎样把任意一个文件读到oracle的blob里,急啊!! 公务贴(八月七日) 野种子 这样可以吗?请高手帮忙。 我要做一个软件,这个软件可以进行光盘(VCD,DVD)的刻录,请问哪里有源代码下载? MSMQ服务器如何安装??? 高分提问,请高手相助! 概念问题:Lun,scsi bus number,host adapter number,scsi id 这些含义如何 如何Copy有损毁的VCD(唐伯虎点秋香)? WebLogic7 的乱码问题??? 与的问题 有人给你送礼希望你能....你会如何? 我该选哪一个?(在线等) 请问如何在word里嵌入一个工具条 我的一台服务器安装的是Win2000 Server版,而客户端安装的是Win98,当通过客户端的Win98系统去访问服务器时,就会弹出一个要求输入网络密 两个问题请教,做过大项目的请来帮忙 傻问题大家帮帮忙 简单问题!请指点(急!在线等!) 讨论:是用全局变量,还是用发送消息? 关于jsp与javascript之间的问题,紧急!!!对高手的挑战 我想写一个窗体,要使它不在任务栏上 如何用php语法进行文件的直接下载,高手请进 怎样利用CFile类来完成创建多个文件夹? 请exee、jasminelai、smart2me、patricklee01() 、greenazcf进来拿分!!! 请各位帮个忙,FileAge()、raise是什么意思?虽然是简单希望各位帮忙!! 怎样做个SPY++查不到句柄的控件? 请教表格自适应的问题 知道并了解VCL底层运作机制的朋友切磋一下好吗? VB如何调用RAR? 控制台程序中字符串的定义问题 ====高分求助!!===== 請問如何設置table使之在dba studio 看不到但是通過sql/plus可以看到 一个关于表单的简单问题<select name=..>中怎样确定选定的是第几项 ==找错!!! 两行代码,错在哪儿??== 有谁知道SQL SERVER为什么会占用600多M的内存? VB如何调用RAR? ====高分求助!!===== 哪位大侠知道可以下载电子书籍的好网站~~~(当然是关于计算机的。。。) 关于winrunner的delphi插件问题 截取swf动画里面的图片用什么软件,下载地址有吗? 上网速度慢?为何? win2000,安装在C:,NTFS格式,由于误操作,现在无法进入,出现提示为:missing operating system,怎么解决,急!(不想格式化重装) 请问如何在word里嵌入一个工具条 有关对话框的状态栏的问题? 怎样用DOM调用在服务器端动态生成的元素? 昨夜冻的肚子疼,不爽! 散分。 请大家帮帮我,水晶报表问题!! 小弟做了一JSP应放在哪个目录下? 秘鲁高等法院驳回藤森在家服刑申请美刊:中国房地产“泡沫总会破灭”斯里兰卡一出租司机诈骗中国游客900中国国家级人才工程“万人计划”全面实天天在校门口带孩子们过马路 郑大伯红马英九呼吁台立法机构尽快通过服贸协议中国三部门要求规范母乳代用品宣传和销三季度中经产业景气指数:工业经济温和“基础四国”杭州发声督促发达国家兑现食品安全法修订草案:网购食品出问题网宁波1至6号轨道站点全公布 看看家门312国道蜀山段绿化建设基本完成在深化司法体制改革中加快建设法治合肥合肥十中新校区9月将投入使用筷子“驱虫”好神奇?其实都是“老把戏专家“会诊”为矿山风险评等级40名外来人员被成功劝返一环路开罚随意变道凡人善举:合肥小小旧书店 牵动万千爱一环路随意“加塞”将被智能交通设备抓首季度全市销售类人才需求井喷全市五保对象供养标准再提标
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘