この記事は2020年04月17日に投稿しました。
目次
リンク
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回はWin32 APIでソケット通信する方法についてです。
2. Win32 APIでソケット通信する
Win32 APIでソケット通信する方法ですが、実装例のようになります。
実装例
#include "pch.h" #include <iostream> #include <WinSock2.h> #include <ws2tcpip.h> int main() { // 接続先は環境に合わせて置き換えてください。 // 接続先(IPアドレスまたはホスト名) std::string ipAddr = "127.0.0.1"; //std::string ipAddr = "localhost"; // ポート番号 int portNo = <ポート番号>; // 初期化処理を行います。 WSADATA wsaData; WSAStartup(MAKEWORD(2, 0), &wsaData); // ソケットを生成します。 SOCKET sock = socket(PF_INET, SOCK_STREAM, 0); // 接続先情報を設定します。 SOCKADDR_IN sockaddr; sockaddr.sin_family = PF_INET; sockaddr.sin_port = htons((USHORT)portNo); // 接続先を設定します。 // まずはIPアドレスで設定します。 InetPton(sockaddr.sin_family, ipAddr.c_str(), &sockaddr.sin_addr.S_un.S_addr); // 接続先がIPアドレスではない場合 if (sockaddr.sin_addr.S_un.S_addr == 0xFFFFFFFF) { // 接続先をホスト名で設定します。 ADDRINFOA hints; PADDRINFOA res = NULL; SecureZeroMemory(&hints, sizeof(hints)); hints.ai_family = PF_INET; hints.ai_socktype = SOCK_STREAM; if (getaddrinfo(ipAddr.c_str(), NULL, &hints, &res) != 0) { // ホスト名で設定できない場合 // 終了処理を行い、終了します。 WSACleanup(); return -1; } sockaddr.sin_addr.S_un = ((LPSOCKADDR_IN)(res->ai_addr))->sin_addr.S_un; freeaddrinfo(res); } // 接続します。 int result = connect(sock, (LPSOCKADDR)&sockaddr, sizeof(sockaddr)); // 接続できない場合 if (result != 0) { // 終了処理を行い、終了します。 WSACleanup(); return -1; } // ここで送受信のsend関数とrecv関数で通信処理を行います。 // (処理は省略します) // 切断します。 closesocket(sock); // 終了処理を行います。 WSACleanup(); return 0; }
3. おわりに
業務でソケット通信する必要があり、その方法を調べてみました。
リンク
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688