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

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

编辑:说三道四文库 发布时间:2017-09-21 04:05
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也行,如果连接成功有事件统治,断开也有事件通知!!
苹果员工爆辞职内幕 Windows Phone 8.1被曝光信息汇总 Phaser:开源的HTML5 2D游戏开发框架 HTML5调查:做的好,收入不比iOS差 汽车巨人福特让“数据”说话 基调数据解读2014网购行业的3大变化 测测:用百度Clouda占卜移动互联网 微软的无奈:或允许Android应用运行于Windows平台 如何选择适合自己的编程语言 Google Now新增语音命令:生活简单一点,让爱更近一点 千万美金收购案:GetJar是一家怎样的公司 传苹果与时代华纳等公司合作,推新一代Apple TV 追本溯源 解析“大数据生态环境”发展现状 为Hadoop存储层增加对OpenStack Swift的支持 详解并行逻辑回归 在AWS上使用GPU实现分布式神经网络 大数据时代,看“小数据”如何支持决策 22人15天研发 微信红包系统发起“珍珠港偷袭”的背后 开发产品防脱节,DevOps来帮忙 手游福音:官方中文版Unity用户手册免费发布 支持多平台!2D和3D游戏引擎Godot宣布开源 从Google备份互联网看“数据安全” NBA全明星周末,数据打造下的辉煌盛事 2014情人节没活动?我们来帮你! Windows 8授权销售已超过2亿份 速度不及Win 7 IDC:2013年第四季度Windows Phone出货量大幅增长 深入思考SDN的核心本质:从SDN=OpenFlow回到软件定义网络 谷歌、VMware在Chromebooks上双赢了,微软你怎么看? Tizen真要来了!又有15家IT大佬成帮会成员 研发周报:开源世界应该致谢的五家公司 Square、LinkedIn、Google... 看国外巨头如何“绑架”用户? 请问怎么用JDBC将JBUILDER与MS SQL SERVER数据库连接? 我在www.qwerks.com 上申请了一个帐户,有些疑问。 哪儿有最简单的ASP连sqlserver程序的完整例子,要使用运行通过的 在DLL中如何得到即将调用它的应用程序的主窗口指针? 密码登陆窗口问题? 在用WebBrowser控件时的问题 CSpinButtonCtrl问题 table.edit 一处理出现multiple records found, but only one was expected的错误,怎么回事? 急,问两个问题 关于minix网络部分原码的问题。。 ReadBuffer读取时有大小的限制吗? 打印和报表问题 98下在局域网内实现Win2000的分布式文件系统的方法 我想远程执行文件,必须要拷贝到控制端吗? 地图编辑器的编写 关于CPU…… applet中关于param参数的问题,困扰我多时了? 请教高手:怎样在程序的toolbar中显示使用edit,command控件 新手上路 恳请指教 98下在局域网内实现Win2000的分布式文件管理的方法? 如何破还原卡? 如何从ADOQuery控件中,取得值? 菜鸟求教一句代码的含义 请高手来看一下! 有关密码保存的问题! 为什么我的表单中放上热点按钮后,在onclick事件中写lotusScript,当用web浏览时,按钮不显示 如何让程序只能在一个机器上运行 影音文件格转换问题! http://expert.csdn.net/Expert/topic/1712/1712032.xml?temp=.3572351 紧急,写入文件 百分送上 五只角了,虽然我的可用分只有可怜巴巴的一千多分,但是,偶还是要散,同时希望SARS早点消失 聊天帖~~~~冒着信誉分被减请chiprobot(芯片宝贝)(把神经接到CSDN上烧录)到至一述~~~ installshield如何把bde环境包括进去呢? 我的程序在A服务器是好的在B服务器发现客户端验证有问题,请赐教! 关于变量?快进来看看,在线等待!sql server 2000怪问题 如何实现Access数据库的数据完整性问题 一个关于tag的使用问题(救急) PB8的window和dw插件怎么无法实现?我都要气疯了! 字符串 如何在web页上弹出对话框,要求在此对话框中可以有文本框,还有按扭? 将OPENGL转换到WINDOWS中有没有方法? 如何用C实现对网站的登陆 如何让SQL数据库里面的图片和相应的图片号(数字)这样显示:图片在上面,图片号在下面? 我想在在数据库这个方面发展,我应该怎么学????????? 关于名字空间的问题. Office WORLD中操作一问(急)成功后送给50分 被老板诬陷偷钱,要赔偿,怎么办? 今天我女朋友出门了,,我好担心。。。。。。可恶的非典 看看这是什么错误,在线等!立刻给分 Java in a Nutshell,2nd Edition 的电子版何处可以download?(英文的也可以) gtk2,书中例题出错:2.2节,快捷菜单 一只笼子中装有甲虫和蜘蛛共42条腿,蜘蛛每只8条腿,甲虫每只6条腿,则共有蜘蛛与甲虫多少只 歇后语纸糊的三弦 是我的作业,越快越好 为什么马克思为德国人而共产主义者同盟在英国 三相异步电机220V电压的线路怎么接 装有避雷针的楼房打雷时洗澡安全吗?- 河豚哪里有毒用英文怎么回答问题也要英语 跑步时怎么减少风的阻力 【谚语译吧】纸糊的房子,不能容人.英文 孔子的英文名是什么,要3个 为什么扩大水域面积,会减少地面对风的阻力?为什么增加植被覆盖,则会加大地面对风的阻力? 鲫鱼由浅水游向深水时,鱼体发生的主要变化是( ). ①身体比重增大②鳔内气体增多③身体比重减小④鳔内气体减少A.①② B.②③ C.③④ D.①④ 为什么当金钱站起来说话时,所有的真理都沉默了? 《李白之死》翻译 同浓度的碳酸钠和氯化钠,为什么碳酸钠的阴离子浓度大? 站起来发言脚要怎样站?请说详细点,谢谢 古文《李白之死辨误》得到什么结论 返回舱下落到地表附近的一段时间内,由于受空气阻力作用做匀速运动,在匀速下降过程中......2003年10月16日,“神州”五号飞船返回舱在太空绕地球飞行了14圈后,完成了它的太空之旅,顺利返回 x^2+2x+a>0 a取值范围? 中国搞大跃进为何偏离苏联模式 古代什么时候开始用纸糊窗西汉开始有人造纸,到了东汉蔡伦改进,但直到宋代才开始普遍用于书写.现在只要是个古装片都是纸糊的窗子到底什么时候才开始用纸糊窗 中国四大领海 李白之死辨误的翻译 解数模题有两根半径为R的圆柱形水管互相垂直连接(两水管中心线垂直相交),两水管表面的交为空间曲线,试建立一合适的坐标系,把交线的方程表示出来. 白糖+硝酸钾(KN03)+胶水,它的承载量是多少? 大跃进时期当时中国处于什么状况 练习册上写:金属钾遇二氧化氮立即着火.为什么? |x+4| 文言文李白之死辩误中杜子美指的是 有什么金属可以在二氧化氮中燃烧?生成什么? dnf驱魔二转任务过程 大跃进时期中国到底饿死多少人? 二氧化氮支持燃烧?加热硝酸铜固体发生如下反应:2Cu(NO3)2=2CuO+4NO2↑+O2↑,用向上排空气法收集在集气瓶瓶中,当集气瓶中充满红棕色气体时,瓶中带火星的木条复燃了,说明二氧化氮支持燃烧吗? f(x)=x^2-(a-1)x+5在区间(0.5,1)上是增函数,f(2)的取值范围求法?知道a小于等于2 那个区间的1是限定什么的?X=1右边难道递减?我就是觉得这个函数的定义域是(0.正无穷)才对啊?为甚么是1啊? 文革大跃进死了多少人 NO2能否支持燃烧 假如你被一群人群殴了10分钟,站起来说一句什么话最霸气 古文“河豚鱼说”象征现在什么样的人? 二氧化氮是否支持燃烧今天做了一道题,是关于验证二氧化氮能否支持燃烧的.结论是能使带火星的木条复燃.不知为什么. 用区间表示变量(x-1)²≤1的变化范围紧急 2.3g金属钠与适量水反应计算在标准状况下生成气体的体积 将军的帽子—— 答案是什么(歇后语) 像你这种站起来都像没站起来的人都站起来了我还有什么理由再不站起来呢!这句话怎么理解 怎样测量摆的周期? 中国大跃进是什么? 歇后语:帽子烂了边——() 32w电子镇流器和40w的灯管一起会有影响吗 有没有大约250个字关于汉武帝历史功绩故事,记住是故事能给我一个具体一点的吗 英语翻译begin k:=100; 10:if k>i+j thenbegin k:=k-1;goto 10;end else k:=i*i-j*j;i:=0;j:=0; end 一只笼中装有a只蜘蛛和b只甲虫,蜘蛛每只8条腿,甲虫每只6条腿,则笼中甲虫有腿()条 金属钠与乙醇的反应,有气体产生吗,金属钠会熔成小球状吗 英语翻译原文:边文礼见袁奉高,失次序.奉高曰:“昔尧聘许由,面无怍色.先生为何颠倒衣裳?”文礼回答:“明府初临,尧德未彰,是以贱民颠倒衣裳耳.” 汉武帝的生平事迹有什么? 请问大跃进前中国人口总数是多少? 谁能帮我翻译下一这段序列 具体说明一下你是怎么翻译的!atgagagtgaaggagatcaggaagaattgtcagggcttctggagatggggcatcatgctccttgggatattgatgatctgtaatgctaaagaacaattgtgggttacagtctattatggggtacctgtgtggagagacgcaagcaccactctattttgtgcttcagatgcta LED二极管如何直接连220V电压工作作为指示灯使用,原来的设计是一个红光LED发光二极管,加一个150K,1/4W的电阻,可以正常使用.后来把红光LED换成蓝光LED后,同样串一个150K,1/4W电阻,LED马上烧坏.后 关于汉武帝的历史小故事(200字) 国际航班的客机受风阻力的面积大概是多少啊随意一个型号的就好 一只笼子中装有的甲虫和蜘蛛共42条腿,每只蜘蛛8条腿,每只甲路6条腿,则笼中有蜘 蛛与甲虫各多少只二元一次方程解法,不要“解:设蜘蛛共有X只,甲虫Y只 6X+8X=42 14X=42 X=3 Y=3”类似这种简写解法 打雷在房间打手机可以吗?有没有事情.楼房有避雷针. 甲、乙两人在一幢楼房的三楼窗口比赛掷垒球,他们都尽力沿水平方向抛向同样的垒球,不计空气阻力,甲掷的水平距离正好是乙的两倍,若乙想水平掷出相当于甲在三楼窗口掷出的距离,则乙应 国防部:日频繁制造战争气氛 应改变扭以色列攻击叙利亚军事基地 目标是俄制美国超市自销商品走俏 主打物美价廉美专家:中国要思考能源政策 减少对煤Nexus 5和市售旗舰机型配置对比统计局:10月中国制造业采购经理指数普京击败奥巴马成2013最有权势人物铁腕普京突击检查俄军核战备 因外界猜10月制造业PMI创18个月新高 经智利发生6.5级地震无伤亡报告《千金归来》片场搞笑花絮照曝光(组图叙利亚当局表明愿无条件参加叙问题国际美国国务卿克里即将出访中东、欧洲八国花莲地震能量超过一颗原子弹 在杭台商台湾花莲地震:杭州不少市民穿着睡衣冲普京登顶权力榜刺痛美国 美俄反应冰火今起浙江93号汽油每升降6分 创今年中俄驳斥日媒“俄罗斯联日本牵制中国”义乌乡村红糖飘香 百姓迎来“甜蜜”致外媒:中国不缺改革突破口 缺推进改革联合国称叙利亚完成对化武生产设施功能近赏 New Balance M13Nike International投了P2P后你赚的怎么样?这些人都盆心放空,是对自己最好的答案杨白劳与黄世仁的官司怎么判?《民间借如果“钱”会说话……你会被呛死吗?|给保险业“把把脉”!不服请拍砖!险企服务评级出炉,现在跪舔客户脚跟还Uber与比亚迪合推电动汽车,这次巴荐|犹太人最著名的十大家训,学习了天珠怎么辨别真假当前网贷平台运营的几个主要风险问题谁是杀死牛市的真正凶手?当你跟老板争执你牛肉面里牛肉少的时候中年危机袭击70后:下半辈子我会陷入493家P2P平台“坏账”50亿 较重磅!最高法院司法解释为民间借贷正名中国第三波暴富浪潮已滚滚而来中国经济又一类泡沫或即将浮现【独家】P2P主要监管政策初定:各地银行职场卖萌记:男员工挥洒英雄范,女
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘