Amazonでお得な買い物

【C#超入門】ソケット通信の基礎を学ぼう|サーバーとクライアントを構築

C# ソケット通信

今回はC#のソケット通信を学んでいきたいと思います。

目次
スポンサーリンク

ソケット通信って何?

ソケット通信は異なるアプリ間でデータの送受信を行うための手段です。

ソケットというのはアプリとアプリの通信端点のことで、通信の出入り口(コネクタみたいなもの)にあたります。

ソケット通信のサンプルコード

それではお試しにソケット通信のサンプルコードを紹介していきます。

クライアント側のコード

クライアント側の処理はこちら。

  1. ソケットの作成
  2. サーバーとの接続を確立
  3. 〜実際の処理を実行〜(今回はHello World!を送り、HELLO WORLD!を受け取る。)
  4. ソケットを終了

サンプルコード

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketClient
{
    class Program
    {
        static void Main(string[] args)
        {
            SetClient("Hello World!!");
        }

        /// <summary>
        /// クライアントを構築してメッセージを送信する
        /// </summary>
        /// <param name="sendMessage">送信するメッセージ</param>
        public static void SetClient(string sendMessage)
        {
            // IPアドレスやポートの設定
            IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);

            // ソケットを作成
            Socket socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            // 接続する。失敗するとエラーで落ちる。
            socket.Connect(remoteEP);

            // Sendで送信
            byte[] message = Encoding.UTF8.GetBytes(sendMessage);
            socket.Send(message);

            // Receiveで受信
            byte[] bytes = new byte[1024];
            int bytesRec = socket.Receive(bytes);
            string data = Encoding.UTF8.GetString(bytes, 0, bytesRec);
            Console.WriteLine(data);

            // ソケットを終了
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();
        }
    }
}

実行結果

HELLO WORLD!!

サーバー側のコード

サーバー側では以下の処理を行います。

  1. ソケットを作成
  2. ソケットにポート番号の割り当て
  3. クライアントから接続要求を受け付ける準備
  4. 〜実際の処理を実行〜(今回はHello World!を受け取り、HELLO WORLD!にして返す。)
  5. ソケットを終了

サンプルコード

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketServer
{
    class Program
    {
        static void Main(string[] args)
        {
            SetServer();
        }

        /// <summary>
        /// サーバーを構築してメッセージを受信する
        /// </summary>
        public static void SetServer()
        {
            // IPアドレスやポートの設定
            // 受信データバッファ
            byte[] bytes = new byte[1024];
            IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

            // ソケットの作成
            Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            // 通信の受け入れ準備
            listener.Bind(localEndPoint);
            listener.Listen(10);

            // 通信の確立
            Socket handler = listener.Accept();


            // 任意の処理
            // データの受取をReceiveで行う。
            int bytesRec = handler.Receive(bytes);
            string data = Encoding.UTF8.GetString(bytes, 0, bytesRec);
            Console.WriteLine(data);

            // 大文字に変更
            data = data.ToUpper();

            // クライアントにSendで返す。
            byte[] message = Encoding.UTF8.GetBytes(data);
            handler.Send(message);

            // ソケットの終了
            handler.Shutdown(SocketShutdown.Both);
            handler.Close();
        }
    }
}

実行結果

Hello World!!
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

都内の精密機器を作っている会社に勤務している14年目のエンジニアです。趣味は美味しいものを食べることとゴルフ。プログラムについて今まで学んだことをわかりやすく発信するサイトを目指しています。

コメント

コメント一覧 (1件)

  • サーバとクライアントが同じIP指定してますね。
    (試験なら良いんですが実際はクライアント側はサーバのIPを指定しますから)

    いろいろ参考になりました!。

コメントする

目次