NonSoft

ソケットで電文の送受信をするサンプル
(VC6/VB6/VBA)


 サンプル(ソース/コード)
<このサンプルの概要>
ソケット(TCP/IP)を使用して電文の送受信(クライアント側)をするVC6(C++)のサンプルソースです。

ソケット(TCP/IP)の接続手順は以下の通りです。
1.ソケット初期化
2.ソケット生成
3.ソケット接続

ソケット(TCP/IP)の送信手順は以下の通りです。
1.送信電文作成
2.ソケット送信

ソケット(TCP/IP)の受信手順は以下の通りです。
1.ソケット受信
2.受信電文表示

実際にソケット通信のプログラムを作る際は、受信イベントが非同期に発生するため、
CSocketの派生クラスを作成しOnReceiveメソッドで受信処理をした方が良いです。
また、ソケットのクローズ処理も同様にOnCloseメソッドで処理する必要があります。

(感想)
VCでのソケット通信は面倒ですね。VCに比べればVBは簡単でしょう。
ついでなのでVB6のサンプルも書いて置きます。
ついでなのでVBAのサンプルも書いて置きます。

ソケット関係のその他のツールやサンプルソースはこちらです。
このサンプルの通信テストでもこちらのツールを使用しました。
通信サンプルやツール(RS232C TCP/IP UDP/IP)

// VC6のソケット通信サンプル
// MFCを使用しています
// ダイアログベースの初期処理でソケット送受信しています
#include <afxsock.h>
BOOL CTcpIpDlg::OnInitDialog()
{
    // ソケット初期化
    if (AfxSocketInit() == FALSE){
        MessageBox("AfxSocketInit Error","ERROR",MB_ICONSTOP);
        return -1;
    }

    // ソケット生成
    CSocket *objSoc = new CSocket();
    if (objSoc->Create() == FALSE){
        MessageBox("CSocket.Create Error","ERROR",MB_ICONSTOP);
        return -1;
    }

    // ソケット接続
    if (objSoc->Connect("127.0.0.1",8888) == FALSE) {
        MessageBox("CSocket.Connect Error","ERROR",MB_ICONSTOP);
        return -1;
    }

    // 送信電文作成
    char SndStr[32] = "abcあいう";
    int SndSiz = strlen(SndStr);

    // ソケット送信
    if (objSoc->Send(SndStr,SndSiz) <= 0){
        MessageBox("CSocket.Send Error","ERROR",MB_ICONSTOP);
        return -1;
    }else{
        // ソケット送信成功
        MessageBox(SndStr,"SEND SUCCESS",MB_ICONINFORMATION);
    }

    // ソケット受信
    char RcvStr[32];
    memset(RcvStr,0,sizeof(RcvStr));
    int RcvSiz = objSoc->Receive(RcvStr, sizeof(RcvStr));
    if (RcvSiz <= 0){
        MessageBox("CSocket.Receive Error","ERROR",MB_ICONSTOP);
        return -1;
    }else{
        // ソケット受信成功
        // 受信電文表示
        MessageBox(RcvStr,"RECEIVE SUCCESS",MB_ICONINFORMATION);
    }

    // ソケットクローズ
    objSoc->Close();

    return TRUE; 
}

' VB6のソケット通信サンプル
' Winsockコントロールをフォームに追加しています
Private Sub Form_Load()
    ' ソケット接続
    Winsock1.Connect "127.0.0.1", 8888
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ' ソケットクローズ
    Winsock1.Close
End Sub

Private Sub Command1_Click()
    ' ソケット送信
    Winsock1.SendData "abcあいう"
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    ' ソケット受信
    Dim msg As String
    Winsock1.GetData msg
    MsgBox msg
End Sub

' EXCEL VBAのソケット通信サンプル(ACCESS VBAでも動きます)
' MSWINSCK.OCXを参照設定しています(MSWINSCK.OCXが入っているVB6ランタイムが必要)
Private WithEvents Winsock1 As Winsock

Private Sub CommandButton1_Click()
    ' ソケット接続
    Set Winsock1 = New Winsock
    Winsock1.Connect "127.0.0.1", 8888
End Sub

Private Sub CommandButton2_Click()
    ' ソケットクローズ
    Winsock1.Close
End Sub

Private Sub CommandButton3_Click()
    ' ソケット送信
    Winsock1.SendData "abcあいう"
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    ' ソケット受信
    Dim msg As String
    Winsock1.GetData msg
    MsgBox msg
End Sub