今回はC#のソケット通信を学んでいきたいと思います。
目次
スポンサーリンク
ソケット通信って何?
ソケット通信は異なるアプリ間でデータの送受信を行うための手段です。
ソケットというのはアプリとアプリの通信端点のことで、通信の出入り口(コネクタみたいなもの)にあたります。
ソケット通信のサンプルコード
それではお試しにソケット通信のサンプルコードを紹介していきます。
クライアント側のコード
クライアント側の処理はこちら。
- ソケットの作成
- サーバーとの接続を確立
- 〜実際の処理を実行〜(今回はHello World!を送り、HELLO WORLD!を受け取る。)
- ソケットを終了
サンプルコード
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!!
サーバー側のコード
サーバー側では以下の処理を行います。
- ソケットを作成
- ソケットにポート番号の割り当て
- クライアントから接続要求を受け付ける準備
- 〜実際の処理を実行〜(今回はHello World!を受け取り、HELLO WORLD!にして返す。)
- ソケットを終了
サンプルコード
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!!
コメント
コメント一覧 (1件)
サーバとクライアントが同じIP指定してますね。
(試験なら良いんですが実際はクライアント側はサーバのIPを指定しますから)
いろいろ参考になりました!。