メッセージを送信する Windows Program

UDP でメッセージを送信する Windows Program を作成します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. UDP/IP とは User Datagram Protocol/Internet Protocol の略です。
    UDP/IP の下位プロトコルである IP は、一意に管理されたアドレスである IP アドレスを目印にパケットの伝送を行ないます。
    UDP/IP の上位プロトコルである UDP は、姉妹プロトコルである TCP/IP の TCP と異なり IP のパケットをほぼそのままの形で伝送します。
    従って、誤り検出や再送要求, フロー制御などの処理は行なわないが, その分高速に処理できます。
  2. このプログラムは、私が作成した Wsock Object Class を使用します。
    新規プロジェクトを作成して、次のファイルをプロジェクトのフォルダーに格納して下さい。
    ファイル 説明
    Main.cpp メインプログラムファイル
    Wsock.h Wsock Object Class のヘッダファイル
    Wsock.lib Wsock Object Class のライブラリ
  3. ページ先頭の画像を参考に DialogBox を作成して下さい。
    BOX キャプション ID
    DialogBox UDP Sendoto IDD_DIALOG1
    EditControl URL IDC_URL
    EditControl PORT IDC_PORT
    EditControl 送信メッセージ IDC_SENDM
    Button 進行メッセージ IDC_MSG
    Button Start UP IDC_STARTUP
    Button 送信 IDC_SEND
    Button 終了 IDCANCEL
  4. windows.h をインクルードすると winsock2.h もインクルードされます。
    Wsock.h をインクルードして、ws2_32.lib と Wsock.lib をリンクして下さい。
    Wsock *App は Wsock Object Class の定義です。
    URL[] でメッセージを送信する相手先を定義します。
    PORT でポートアドレスを定義します。
    SendMSG[] は送信するメッセージの定義です。
        /***********************************************/
        /*★ UDP 送信  Wsock Object Class    前田 稔 ★*/
        /***********************************************/
        #include    <windows.h>
        #include    "Wsock.h"
        #include    "resource.h"
        #pragma     once
        #pragma     comment(lib,"ws2_32.lib")
        #pragma     comment(lib,"Wsock.lib")
    
        Wsock       *App= NULL;     //Wsock Object Class
        char        URL[MAX_PATH]= "127.0.0.1";
        int         PORT= 12345;
        char        SendMSG[1024]= "HELLO";
        char        buf[80];
        
  5. WinMain() では DialogBox を表示するだけです。
  6. WM_INITDIALOG で Wsock Object Class を生成します。
    EditBox に URL と PORT と送信メッセージの規定値を表示します 。
        case WM_INITDIALOG:
            App= new Wsock();
            SetDlgItemText(hDlg,IDC_URL,URL);
            wsprintf(buf,"%d",PORT);
            SetDlgItemText(hDlg,IDC_PORT,buf);
            SetDlgItemText(hDlg,IDC_SENDM,SendMSG);
            break;
        
  7. Start UP ボタンのクリックで Winsock の初期設定を行います。
    この操作は転送する前に一度だけ実行します。
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {   case IDC_STARTUP:
                    App->Startup();
                    SetDlgItemText(hDlg,IDC_MSG,App->szMSG);
                    break;
        
  8. 送信ボタンがクリックされると、URL と PORT で指定された相手先にメッセージを送信します。
    UDPSend() の実行結果が進行メッセージに表示されます。
    UDP では相手先に届いたか否かには関知せず、単にメッセージを送信するだけです。
    受信するためには、メッセージが何時届いても良いように、常に待機していなければなりません。
                case IDC_SEND:
                    GetDlgItemText(hDlg,IDC_URL,URL,MAX_PATH);
                    PORT= GetDlgItemInt(hDlg,IDC_PORT,NULL,FALSE);
                    GetDlgItemText(hDlg,IDC_SENDM,SendMSG,1024);
                    App->UDPSend(URL,PORT,SendMSG);
                    SetDlgItemText(hDlg,IDC_MSG,App->szMSG);
                    break;
        
  9. WM_CLOSE では Wsock Object Class を開放して下さい。
            case WM_CLOSE:
                SAFE_DELETE(App);
                EndDialog(hDlg, TRUE); 
                return TRUE;
        

超初心者のプログラム入門(Win32API C++)