8月24日,,終於有了net send

來源:互聯網
上載者:User

今在 電腦編程技巧與維護上看到了那個自己編程寫區域網路發資訊的文章,,就是實現net send 的功能,,主要的部分就是用了 netApi32.dll 中的 NetMessAgeBufferSend()函數,,想到自己上學期一直想編個net send的程式,,現在終於有盼頭了 呵呵,,
採用倒敘的方式,,先把寫好的程式貼著,,然後慢慢分析
#include <stdio.h>
#include <windows.h>
#include <lm.h>

#pragma comment (lib,"netapi32.lib")

//#define UNICODE
#define MAXLEN 256

int main(int Argc,char *Argv[])
{
 //WSADATA WSADAtA;
 //WSAStartup(MAKEWORD(2,2),&WSADAtA);
 DWORD rc;
 int i=1;
 wchar_t server[MAXLEN],ToNAme[MAXLEN],msg[MAXLEN];
 if(Argc!=4&&Argc!=5){
  printf("/nusAge:netsend ////servernAme ToUserNAme /"messAge/"/n");
  return 1;
 }
 mbstowcs(server,Argv[1],MAXLEN);
 server[MAXLEN-1]=L'/0';
 mbstowcs(ToNAme,Argv[2],MAXLEN);
 ToNAme[MAXLEN-1]=L'/0';
 mbstowcs(msg,Argv[3],MAXLEN);
 msg[MAXLEN-1]=L'/0';
 if(Argc==5) i=atoi(Argv[4]);

 printf("/n Here we go...../n");
 while(i--){
  rc = NetMessageBufferSend(server,ToNAme,NULL,msg,MAXLEN);
 }
 if(rc!=NERR_Success)
 {
  printf("NMBS() returned %lu/n",rc);
  return 1;
 }
 printf("/n Done./n");
 return 0;

}

好,,來談談最鬱悶的,,看NetMessAgeBufferSend()的msdn裡資料,說是要用標頭檔lmmsg.h  加了這個後,,就是3個錯誤,,都出在lmmsg.h裡,,調了很久,後來把所有的代碼都注釋掉了 還是那3個錯誤,,看來不是我的問題了,,後來在網上翻到一篇用那個函數的程式,,看到他用的標頭檔是lm.h。我學,,那3個錯誤沒有了,,可msdn裡介紹的用法
#define UNICODE
   #define MESGLEN 50
   WCHAR awcToName[] = TEXT("DomainName*");
   WCHAR awcFromName[] = Text("MyComputer");
   WCHAR awcMesgBuffer[MESGLEN] = Text("This ia Test Message");
   NET_API_STATUS nasStatus;

   nasStatus = NetMessageBufferSend(NULL,
                                    awcToName,
                                    awcFromName,
                                    awcMesgBuffer,
                                    MESGLEN);
卻出錯,,類型不符,, 難道不能用WCHAR嗎?
WINNT.H

#ifndef _MAC
typedef wchar_t WCHAR;    // wc,   16-bit UNICODE character
#else
// some Macintosh compilers don't define wchar_t in a convenient location, or define it as a char
typedef unsigned short WCHAR;    // wc,   16-bit UNICODE character
#endif
//---------------------------------------------------------
STDIO.H

#ifndef _MAC
#ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif

看樣子 wchar_t 應該和 WCHAR 是一樣的
後來我試了,,兩種都沒沒問題,,那我以前?? 奇怪了

mbstowcs() 是將ASCII字元轉化成UNICODE字元的函數,,
mbstowcs(server,Argv[1],MAXLEN);
server[MAXLEN-1]=L'/0'; -->這句一直不明白為什麼要這樣,,'/0'不能用mbstowcs()轉化嗎?

net send 命令只需要給出要發送的主機名稱或ip,不需要指出要發送到的主機上的使用者名稱,,而netmessAgebuffersend則必須指出,,而且自己的使用者名稱也必須指定,,而且要是個確實存在的使用者,為NULL時,發送當前的使用者名稱..

其實這個程式完全是我照抄的了,,而且還有一部分沒懂,網上那份程式我也付在附件裡,,下一步要做的是用NetMessAeNameEnum() 列舉機器上的使用者,,然後向那台機子上的所有使用者都發,,,再下一步 我想用封包技術直接類比net send  這在豬海時我已經試過,,可惜半途卡住了 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.