|
|||||
<このサンプルの概要> ソケット(UDP/IP)を使用して電文の送受信をするVC6(C++)のサンプルソースです。 TCP/IPにはサーバー側とクライアント側という区別がありましたが、 UDP/IPには区別はありません。 ソケット(UDP/IP)の接続手順は以下の通りです。 1.ソケット初期化 2.ソケット生成 ソケット(UDP/IP)の送信手順は以下の通りです。 1.送信電文作成 2.ソケット送信 ソケット(UDP/IP)の受信手順は以下の通りです。 1.ソケット受信 2.受信電文表示 実際にソケット通信のプログラムを作る際は、受信イベントが非同期に発生するため、 CSocketの派生クラスを作成しOnReceiveメソッドで受信処理をした方が良いです。 (感想) VCでのソケット通信は面倒ですね。VCに比べればVBは簡単でしょう。 ついでなのでVB6のサンプルも書いて置きます。 ついでなのでVBAのサンプルも書いて置きます。 ソケット関係のその他のツールやサンプルソースはこちらです。 このサンプルの通信テストでもこちらのツールを使用しました。 通信サンプルやツール(RS232C TCP/IP UDP/IP) // VC6のソケット通信サンプル // MFCを使用しています // ダイアログベースの初期処理でソケット送受信しています #include <afxsock.h> BOOL CUdpIpDlg::OnInitDialog() { // ソケット初期化 if (AfxSocketInit() == FALSE){ MessageBox("AfxSocketInit Error","ERROR",MB_ICONSTOP); return -1; } // ソケット生成 CSocket *objSoc = new CSocket(); if (objSoc->Create(7777,SOCK_DGRAM) == FALSE){ MessageBox("CSocket.Create Error","ERROR",MB_ICONSTOP); return -1; } // 送信電文作成 char SndStr[32] = "abcあいう"; int SndSiz = strlen(SndStr); // ソケット送信 if (objSoc->SendTo(SndStr,SndSiz,8888,"127.0.0.1") <= 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.Protocol = sckUDPProtocol Winsock1.RemoteHost = "127.0.0.1" Winsock1.RemotePort = 8888 Winsock1.Bind 7777 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.Protocol = sckUDPProtocol Winsock1.RemoteHost = "127.0.0.1" Winsock1.RemotePort = 8888 Winsock1.Bind 7777 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 |