「C Sharpとネットワーク - TCP Client」の版間の差分
(→概要) |
|||
30行目: | 30行目: | ||
== サンプルコード == | == サンプルコード == | ||
<syntaxhighlight lang=" | 以下の例では、TcpClientクラスを使用して、サーバに接続およびメッセージを送信して応答を受信している。<br> | ||
<br> | |||
<syntaxhighlight lang="c#"> | |||
using System; | |||
using System.Text; | |||
using System.IO; | |||
using System.Net.Sockets; | |||
class TcpClientExample | |||
{ | { | ||
static void Main() | |||
{ | |||
string server = "<ホスト名またはIPアドレス>"; // サーバのアドレス | |||
int port = <ポート番号>; // ポート番号 | |||
try | |||
{ | |||
using (TcpClient client = new TcpClient(server, port)) | |||
{ | |||
Console.WriteLine("サーバに接続"); | |||
using (NetworkStream stream = client.GetStream()) | |||
{ | |||
// サーバにメッセージを送信 | |||
string message = "Hello, Server"; | |||
byte[] data = Encoding.UTF8.GetBytes(message); | |||
stream.Write(data, 0, data.Length); | |||
Console.WriteLine($"送信メッセージ: {message}"); | |||
// サーバーからの応答を受信 | |||
data = new byte[256]; | |||
int bytes = stream.Read(data, 0, data.Length); | |||
string responseData = Encoding.UTF8.GetString(data, 0, bytes); | |||
Console.WriteLine($"受信メッセージ: {responseData}"); | |||
} | |||
} | |||
} | |||
catch (ArgumentNullException e) | |||
{ // 無効な引数が渡された場合 | |||
Console.WriteLine($"ArgumentNullException: {e.Message}"); | |||
} | |||
catch (SocketException e) | |||
{ // ネットワーク関連のエラーが発生した場合 | |||
Console.WriteLine($"SocketException: {e.Message}"); | |||
} | |||
catch (IOException e) | |||
{ // ストリームの読み書き中にエラーが発生した場合 | |||
Console.WriteLine($"IOException: {e.Message}"); | |||
} | |||
catch (Exception e) | |||
{ // その他の予期せぬエラーが発生した場合 | |||
Console.WriteLine($"予期せぬエラーが発生しました: {e.Message}"); | |||
} | } | ||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
2024年9月13日 (金) 18:37時点における版
概要
TCP (Transmission Control Protocol) は、インターネットプロトコルスイートの中核をなす通信プロトコルの1つである。
TCPは信頼性の高い通信を提供する強力なプロトコルであり、C#の豊富なネットワーキングAPIと組み合わせることで、効率的なネットワークアプリケーションの開発が可能になる。
C#においても、TCPを利用したネットワークプログラミングは重要な位置を占めている。
TCPの主な特徴は、信頼性の高い通信を提供することである。
これは、データの送受信を確実に行い、パケットの損失や重複、順序の入れ替わりを防ぐ機能を持っているためである。
また、フロー制御や輻輳制御の仕組みも備えており、ネットワークの状況に応じて通信速度を調整する。
C#でTCP通信を実装する場合は、主にSystem.Net.Sockets
名前空間を使用する。
この名前空間には、TcpClient
クラスやTcpListener
クラス等が含まれており、これらを使用してクライアントとサーバの通信を簡単に実装できる。
TcpClient
クラスを使用すると、サーバへの接続やデータの送信が可能になる。
TcpListener
クラスは、サーバ側でクライアントからの接続を待ち受けるために使用する。
実際の通信では、ストリームを介してデータのやり取りを行う。
NetworkStream
クラスを使用して、接続したソケットからデータを読み書きする。
これにより、テキストやバイナリデータを効率的に送受信することができる。
C#でTCP通信を実装する場合は、非同期プログラミングの手法を活用することが推奨される。
BeginConnect
メソッドやBeginAccept
メソッド等を使用するこにより、アプリケーションの応答性を向上させることができる。
セキュリティ面では、SSL / TLS証明書を使用して通信を暗号化することが可能である。
C#では、SslStream
クラスを使用してこれを実現することができる。
また、接続の確立、切断、タイムアウトの処理、エラーハンドリング等を適切に実装することにより、安定したネットワークアプリケーションを開発することができる。
サンプルコード
以下の例では、TcpClientクラスを使用して、サーバに接続およびメッセージを送信して応答を受信している。
using System;
using System.Text;
using System.IO;
using System.Net.Sockets;
class TcpClientExample
{
static void Main()
{
string server = "<ホスト名またはIPアドレス>"; // サーバのアドレス
int port = <ポート番号>; // ポート番号
try
{
using (TcpClient client = new TcpClient(server, port))
{
Console.WriteLine("サーバに接続");
using (NetworkStream stream = client.GetStream())
{
// サーバにメッセージを送信
string message = "Hello, Server";
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
Console.WriteLine($"送信メッセージ: {message}");
// サーバーからの応答を受信
data = new byte[256];
int bytes = stream.Read(data, 0, data.Length);
string responseData = Encoding.UTF8.GetString(data, 0, bytes);
Console.WriteLine($"受信メッセージ: {responseData}");
}
}
}
catch (ArgumentNullException e)
{ // 無効な引数が渡された場合
Console.WriteLine($"ArgumentNullException: {e.Message}");
}
catch (SocketException e)
{ // ネットワーク関連のエラーが発生した場合
Console.WriteLine($"SocketException: {e.Message}");
}
catch (IOException e)
{ // ストリームの読み書き中にエラーが発生した場合
Console.WriteLine($"IOException: {e.Message}");
}
catch (Exception e)
{ // その他の予期せぬエラーが発生した場合
Console.WriteLine($"予期せぬエラーが発生しました: {e.Message}");
}
}
}