再见西城 发表于 2015-1-16 22:31:47

ASP.NET教程之Visual C#完成Windows信使服务

在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。visual|window  如今有良多收集办理软件都具有收集上信息及时传送的功效,固然有些收集通信软件功效对照壮大,有的软件不但能够传送文本信息,还能够传送二进制文件等。但它们都有一个没法克制的弱点,那就是分发对照坚苦,信息传送两边盘算机都必要安装通信软件的客户端和服务器端软件,而且只要但两边都翻开响应软件时,才大概举行信息传送。而信使通信就能够克制上述弱点,因为信使服务在Windows2000体系以上都是自带的,而且此服务在安装完Windows2000以上后的缺省形态是翻开的。以是只需收集的二台盘算机安装Windows2000以上体系,不再必要安装其他软件,就能够经由过程此服务虚现信息传送了。固然这类收集信息传送分发也有后天不敷,就是只能传送文本信息,假如您必要传送二进制文件等庞大的信息或数据,就没法利用这类办法了。

  一.简介Windows的信使服务及其利用办法:

  起首进进"把持面板",在"办理工具"当选择"服务"后,就能够失掉如图01所示界面,图01就是Windows服务的运转窗口:


图01:盘算机Windows"服务"运转界面
  信使服务在Windows操纵体系中对应的服务称号是"Messager"。Windows操纵体系给此服务的界说是"发送和吸收体系办理员大概"警报器"服务传送的动静。"在缺省形态信使服务是启动的,假如发明它处于"中断"大概"已禁用"形态,请启动它,由于前面先容的程序可以一般运转的前提之一就算此服务处于"启动"形态。

  使用Windows体系也能够经由过程信使服务发送信息,详细操纵以下:

  1.在"桌面"上选中"我的电脑"后,单击鼠标右键,在弹出的菜单当选择"办理"后,弹出"盘算机办理"对话框:

  2.翻开"共享文件夹",选中"共享"后,单击鼠标右键,在弹出的菜单当选择"一切义务"中的"发送把持台动静",详细如图02所示,当完成以上操纵就能够失掉如图03所示界面:


图02:使用"信使服务"完成信息发送界面之一
  3.在图03所示界面中,单击"增加"按钮,输出要发送到的盘算机的IP地点或主机称号,在"动静"文本框中输出要发送的信息后,单击"发送"按钮,则信息就经由过程信使服务发送到对方了。


图03:使用"信使服务"完成信息发送界面之一
  以上就是使用Windows的本身的信使服务来发送信息的详细步骤。

  二.VisualC#经由过程信使服务虚现收集信息传送关头手艺:

  固然.NetFrameWorkSDK中供应了很多开辟收集程序的类库,但这些类库中却没有供应挪用信史服务的办法,以是要挪用信史办法只要利用WinAPI函数,这个WinAPI函数NetMessageBufferSend,它位于"Netapi32.dll"文件中。以下就是NetMessageBufferSend函数在VisualC#中的声明办法:


publicstaticexternintNetMessageBufferSend(
stringservername,//服务器称号,为NULL
stringfromname,//吸收方称号,可为IP或盘算机称号
stringmsgname,//信息称号,为NULL
stringbuf,//信息
intbuflen);//信息长度

  对比NetMessageBufferSend函数参数分离输出响应的吸收方称号和信息内容便可,可见NetMessageBufferSend的利用办法仍是十分复杂的。上面就来具体先容VisualC#经由过程信史服务虚现收集信息传送的详细完成办法。
<P>  三.本文中的程序计划、调试和运转的情况:

  (1).微软公司视窗2000服务器版。

  (2).VisualStudio.Net2003企业构建版,.NetFrameWorkSDK1.1版本号4322。

  四.VisualC#经由过程信史服务虚现收集信息传送的详细完成步骤:

  以下就是VisualC#经由过程信史服务虚现收集信息传送的详细完成步骤:

  1.启动VisualStudio.Net。

  2.选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3.将【项目范例】设置为【VisualC#项目】。

  4.将【模板】设置为【Windows使用程序】。

  5.在【称号】文本框中输出【VisualC#完成通信信使】。

  6.在【地位】的文本框中输出【E:VS.NET项目】,然后单击【断定】按钮。如许在"E:VS.NET项目"目次中就创立了一个称号为"VisualC#完成通信信使"的文件夹,内里寄存的就是"VisualC#完成通信信使"项目标一切文件。

  7.把VisualStudio.Net确当前窗口切换到【Form1.cs(计划)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往计划窗体中拖进以下组件,并实行响应操纵:

  二个Lable组件。

  二个TextBox组件,分离用来输出吸收方的IP地点或盘算机名和发送信息内容。

  一个Button按钮,并在这个组件拖进计划窗口后分离双击它们,则体系会在Form1.cs平分别发生这一个组件Click事务对应的处置代码。

  8.把VisualStudio.Net确当前窗口切换到Form1.cs的代码编纂窗口,在Form1.cs的首部的引进定名空间的代码区中,用以下代码交换Form1.cs中由体系主动发生的引进定名空间代码:

usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Data;
usingSystem.Runtime.InteropServices;
//声名WinAPI函数必要利用到此定名空间

  9.以上面代码替换体系发生的InitializeComponent历程。上面代码是对到场窗体的组件和创立的全局变量举行初始化和界说一个Button组件的Click事务:

privatevoidInitializeComponent()
{
 this.textBox1=newSystem.Windows.Forms.TextBox();
 this.textBox2=newSystem.Windows.Forms.TextBox();
 this.button1=newSystem.Windows.Forms.Button();
 this.label1=newSystem.Windows.Forms.Label();
 this.label2=newSystem.Windows.Forms.Label();
 this.SuspendLayout();
 this.textBox1.Location=newSystem.Drawing.Point(124,58);
 this.textBox1.Name="textBox1";
 this.textBox1.Size=newSystem.Drawing.Size(212,21);
 this.textBox1.TabIndex=0;
 this.textBox1.Text="";
 this.textBox2.Location=newSystem.Drawing.Point(124,126);
 this.textBox2.Multiline=true;
 this.textBox2.Name="textBox2";
 this.textBox2.Size=newSystem.Drawing.Size(212,82);
 this.textBox2.TabIndex=1;
 this.textBox2.Text="";
 this.button1.Location=newSystem.Drawing.Point(122,232);
 this.button1.Name="button1";
 this.button1.Size=newSystem.Drawing.Size(106,36);
 this.button1.TabIndex=3;
 this.button1.Text="发送";
 this.button1.Click+=newSystem.EventHandler(this.button1_Click);
 this.label1.Location=newSystem.Drawing.Point(8,66);
 this.label1.Name="label1";
 this.label1.Size=newSystem.Drawing.Size(132,23);
 this.label1.TabIndex=4;
 this.label1.Text="IP地点或盘算机名:";
 this.label2.Location=newSystem.Drawing.Point(78,134);
 this.label2.Name="label2";
 this.label2.Size=newSystem.Drawing.Size(46,23);
 this.label2.TabIndex=5;
 this.label2.Text="内容:";
 this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);
 this.ClientSize=newSystem.Drawing.Size(356,297);
 this.Controls.Add(this.button1);
 this.Controls.Add(this.textBox2);
 this.Controls.Add(this.textBox1);
 this.Controls.Add(this.label2);
 this.Controls.Add(this.label1);
 this.FormBorderStyle=System.Windows.Forms.FormBorderStyle.FixedSingle;
 this.MaximizeBox=false;
 this.Name="Form1";
 this.Text="VisualC#完成通信信使";
 this.ResumeLayout(false);
}

  至此【VisualC#完成通信信使】项目标界面计划和功效完成的后期事情就完成了,计划界面如图04所示:


图04:【VisualC#完成通信信使】项目标计划界面
  10.在Form1.cs中的Main历程以后增加以下代码,以下代码的感化是界说button1的Click事务,在此事务中挪用声名的NetMessageBufferSend函数,把信息经由过程信史服务传送到指定的收集盘算机上往:

privatevoidbutton1_Click(objectsender,System.EventArgse)
{
 byte[]bBuffer=System.Text.Encoding.Unicode.GetBytes(textBox2.Text);
 intnRet=NetMessageBufferSend(null,textBox1.Text,null,textBox2.Text,textBox2.Text.Length*2+2);
}

  11.在增加完button1的Click事务后,再增加以下代码,以下代码的感化是声名NetMessageBufferSend函数:


publicstaticexternintNetMessageBufferSend(
 stringservername,//服务器称号,为NULL
 stringfromname,//吸收方称号,可为IP或盘算机称号
 stringmsgname,//信息称号,为NULL
 stringbuf,//信息
 intbuflen);//信息长度

  至此,在上述步骤都准确完成,并全体保留后,【VisualC#完成通信信使】项目标全体事情就完成了。此时单击快速键【F5】运转程序后,在【IP地点或盘算机名:】文本框中输出对方的IP地点或盘算机名,在【内容:】文本框中输出要传送的信息后,单击【发送】按钮,则程序就会把输出的信息传送到指定的收集盘算机上了。

  五.总结:

  VisualC#经由过程信史服务虚现收集信息传送的关头是要懂得、把握NetMessageBufferSend函数在VisualC#中的声名、挪用办法,固然.Net推出和三年多了,但仍有良多不完美的中央,偶然要借助于COM,偶然要借助于WinAPI函数才干顺遂办理,本文就是一个典范的例子。我想跟着工夫的推移,.NetFrameWorkSDK必定会加倍完美,NetMessageBufferSend等WinAPI函数必定也会在个中找到响应的地位,如许也就削减了程序员的事情难度,也给程序带来更高的不乱性。
有专家说:java不是跨平台,java就是平台,这很好的定义了java的特点。有了java,你只需要等待java平台在新平台上移植。这还不错吧!只是,java不是一个平台,而是多个平台。你需要在这个java平台移植到另一个java平台。

山那边是海 发表于 2015-1-24 14:50:40

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

第二个灵魂 发表于 2015-2-1 17:04:02

主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。

再见西城 发表于 2015-2-7 11:05:59

CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。

谁可相欹 发表于 2015-2-21 19:21:02

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

飘飘悠悠 发表于 2015-3-6 21:07:34

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

老尸 发表于 2015-3-13 09:08:55

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

精灵巫婆 发表于 2015-3-20 18:10:13

主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
页: [1]
查看完整版本: ASP.NET教程之Visual C#完成Windows信使服务