网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Robocode 基本原理之方向剖析.
.JavaMail常见问题之applet中的Ja.
.Java进阶学习:网络服务器编程.
.教程/系统编程 在Java中处理日志.
.在jar包中动态载入第三方jar cla.
.java表达式中类型的自动提升.
.如何更改Netbeans中选项卡的名称.
.Effective java学习笔记6:避免使.
.新手入门:使用 AppFuse 的七个理.
.用Java语言编写通过代理访问的应.
.全面解析Java中的String数据类型.
.Java语言深入:对java.lang的研究.
.Java技术进阶 基于Java的IDEA加密.
.Java虚拟机.
.[webservices开发]使用XFire开发.
.巧妙使用if(true)以及if(false)语.
.如何在Java中实现JobScheduling.
.浅析Java中Data类的应用.
.JUnit -- A good thing to unit .
.基于Struts技术的Web应用设计与实.

Visual C++打造Windows信使服务程序

发表日期:2008-1-5



  信使服务是windows 2000/XP下面的一种通信服务,通过它我们可以在网上象QQ一样进行实时的交流,但和QQ不同的是信使服务不需要拥有一个号码,它只要知道对方的IP地址--假如在局域网中,只要知道对方的计算机名就可以了。我们可以利用"net send"在命令行下面发送消息,也可以通过"控制面板-治理工具-计算机治理"中的"操作"菜单里面的"所有任务-发送控制台消息…"来发送。接收方的计算机要求必须是Win2000/XP,因为 Win9x本身是不提供信服服务的,除非你手动启动了WinPopup.。程序编译运行后,在Windows2000下启动控制台,输入:netsend 192.168.0.10 127.0.0.1 "我的信使程序!"运行以上命令后,在Windows桌面上将弹出一个对话框,其上标有"我的信使程序!"字符和相关IP信息。
  一、实现方法
  信使服务为大家在网络上提供了简便、快捷的聊天方式,所以网上也有一些改进了的信使服务发送程序,使信息的发送可以按照自己的意愿来进行而不受微软提供的"net send"所限制。假如你经常上网,也许会收到通过信使服务发来的广告或者其他莫名其妙的信息,而在"信使服务"窗口中所显示出来的发送方的计算机名或者IP地址和你自己的竟然一样。假如你碰到过这种情况,那么你想不想知道这种改进了的信使服务发送程序是怎么实现的呢?
  本实例将要带你去剖析一下Windows的信使服务,我们将从一个程序员的角度来看看这个信使服务发送程序是如何实现的。其实实现信使服务的整个过程很简单,我们只需要调用一个API函数:
NET_API_STATUS NetMessageBufferSend(
LPWSTR servername,
LPWSTR msgname,
LPWSTR fromname,
LPBYTE buf,
DWord buflen
);

  其中该函数的参数说明如下:
  servername:计算机名,该函数将在指定的这个计算机上面执行。假如为NULL,则表示为本地计算机,通常我们都将其设置为NULL。
  msgname:目标计算机的名字或者IP地址。
  fromname:源计算机的名字或者IP地址。
  buf:指向一个信息缓冲区的指针,在这里你可以填上你想发送的信息。要注重的是,这个参数用的是Unicode编码。
  buflen:上述信息缓冲区中的字节数。
  现在函数已经介绍完了,通过这个函数我们可以发现假如想实现匿名的信使服务实在是太简单--只需要在fromname中填上一个假冒的计算机名或者IP地址就行了。下面给出一个实际例子,在这个程序中,我们从命令行参数接受目标计算机和源计算机名字(IP地址),同时我们还可以设定信息发送的次数。
  二、编程步骤
  1、启动Visual C++6.0,新建项目netsend,选择控制台模式;
  2、在项目中添加新文件netsend.c;
  3、添加代码,编译运行程序。
  三、程序代码
/////////////////////////////////////////////////////////////////////////
#define _UNICODE
#define UNICODE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <windows.h>
#include <locale.h>
#include <lm.h>
#pragma comment(lib,"netapi32.lib")
int wmain(int argc, wchar_t *argv[])
{
  int count;
  wchar_t *wdest, *wfrom, *buffer,*wtarget;
  DWORD dwReturn;
  if((argc <4) (argc >5))
  {
   printf("Usge: %S <DestIP> <SourIP> <Message> [Count]\n",argv[0]);
   printf("Count: Count means number of times to send message,default is 1.\n");
   return 0;
  }
  wdest = argv[1]; //目标计算机
  wfrom = argv[2]; //源计算机
  buffer = argv[3]; //发送的信息
  count = _wtoi(argv[4]); //发送次数,缺省为1次
  if(count ==0)
   count = 1;
   printf("count = %d\n",count);
  dwReturn = NetMessageBufferSend(NULL, wdest, wfrom,
     (LPBYTE)buffer, 2*lstrlen(buffer)); //因为buffer是Unicode编码,所以需要乘以2
  if(dwReturn == NERR_SUCcess)
  {
   printf("Send OK!");
   while(count-->1)
   {
    NetMessageBufferSend(NULL, wtarget, wfrom, (LPBYTE)buffe,2*lstrlen(buffer));
   }
   return 0;
  }
  if(dwReturn == NERR_NameNotFound)
  {
   printf("The user name could not be found.\n");
   return 0;
  }
  if(dwReturn == NERR_NetworkError)
  {
   printf("A general failure occurred in the network hardware.\n");
   return 0;
  }
  if(dwReturn == ERROR_NOT_SUPPORTED)
  {
   printf("This network request is not supported.\n");
   return 0;
  }
  if(dwReturn == ERROR_INVALID_PARAMETER)
  {
   printf("The specified parameter is invalid.\n");
   return 0;
  }
  if(dwReturn == ERROR_ACCESS_DENIED)
  {
   printf("The user does not have Access to the requested information.\n");
   return 0;
  }
  else
   printf("Unknown error!\n");
   return 0;
}

  四、小结
  本实例开发一个Windows信使服务程序,以帮助读者深入了解Windows信使服务实现的内幕。
上一篇:为Java应用程序添加退出事件响应 人气:487
下一篇:J2EE WEB-Tomcat5.5.9中文问题解决方案 人气:544
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐