メニュー

プロダクト



プログラミング


  • Java
    • Web 技術
    • メール技術
      • JavaMail
      • Apache James Mailet
    • Web フレームワーク
      • Jakarta Struts
      • Jakarta Velocity
      • Jakarta Tapestry
      • WebWork2
      • Jakarta Jetspeed
      • Apache Cocoon 2
    • DB 技術
      • JDBC
      • Hibernate
      • Apache Torque
    • DI (IoC) コンテナ
      • Spring Framework
      • Seasar2
      • Apache HiveMind
      • PicoContainer
    • 属性プログラミング
    • テスティング
      • JUnit
      • Jakarta Cactus
      • DBUnit
      • djUnit
      • FitNesse
    • ロギング
      • Apache Log4j
      • Jakarta Commons logging
    • 分散コンポーネント技術
      • EJB
    • リッチ クライアント
      • Java Web Start
    • GUI
    • XML Web サービス
      • Apache Axis
      • Apache SOAP
    • アプリケーション管理
    • トランザクション
    • 開発環境
      • Apache Ant
      • Apache Maven
      • Apache Maven2
    • Eclipse
    • Tips
  • .NET Framework
  • PHP
  • XML
    • SmartDoc
  • 正規表現
  • VB, VBA, VBScript, ASP
  • C/C++

DBMS


  • MySQL
  • PostgreSQL
  • Oracle
  • Microsoft SQL Server
  • HSQLDB
  • SQLite
  • Apache Xindice

アプリケーション サーバ



OS



バージョン管理システム



未整理


最近更新したページ
このウィキの読者になる
更新情報がメールで届きます。
このウィキの読者になる

.NET Tips/Socket

接続の方法


ネットワーク通信を行うために使用する基本的なクラスは System.Net.Sockets.Socket クラスを使用します。このクラスはどのようなプロトコルもサポートし、サーバ / クライアントいずれの用途にも使用できます。しかし、 TCP 、 UDP 接続においては、専用のクラスが用意されています。 TCP (クライアント) は System.Net.Sockets.TcpClient クラス、 TCP (サーバ) は System.Net.Sockets.TcpListener クラス、 UDP は System.Net.Sockets.UdpClient クラスです。

TCP クライアントの使用方法


TcpClient クラスはリモート ホストに TCP 接続を行います。同期ブロッキング モードで動作します。

接続


コンストラクタにリモート ホストを指定するか、 TcpClient#Connect メソッドを呼び出します。

  • コンストラクタ
TcpClient tcpClient = new TcpClient("localhost", 8888);

  • Connect メソッド
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("localhost", 8888);

接続に失敗すると SocketException 例外がスローされます。

送受信


データを送受信するには NetworkStream クラスを使用します。

NetworkStream インスタンスを取得するには TcpClient#GetStream メソッドを呼び出します。

NetworkStream stream = tcpClient.GetStream();

データを送信するには NetworkStream#Write メソッドを呼び出します。このメソッドはバイトデータを送信することができます。

byte[] byteData = ...
stream.Write(byteData, 0, byteData.Length);

文字列を送信する場合、一度、バイトデータに直してから送信することになります。

string text = "ほげ";
byte[] byteData = Encoding.UTF8.GetBytes(text);
stream.Write(byteData, 0, byteData.Length);

データを受信するには NetworkStream#Read メソッドを呼び出します。このメソッドはバイトデータを受信することができます。

byte[] byteData = new byte[1024];
int len = stream.Read(byteData, 0, byteData.Length);

戻り値は実際に読み取れたバイト数です。文字列を受信する場合、このバイトデータから文字列を構築する必要があります。

byte[] byteData = new byte[1024];
int len = stream.Read(byteData, 0, byteData.Length);
string text = Encoding.UTF8.GetString(byteData, 0, len);

NetworkStream クラスによるデータの送受信はブロッキング モードで動作します。つまり、 NetworkStream#Read メソッドを呼び出したときにリモート ホストからデータを受信していない場合、データを受信するまでブロックされます。データを受信しているかどうかは NetworkStream#DataAvailable プロパティで調べることができます。

if (stream.DataAvailable)
{
    byte[] byteData = new byte[1024];
    int len = stream.Read(byteData, 0, byteData.Length);
    string text = Encoding.UTF8.GetString(byteData, 0, len);
}

読み取るデータがない場合、リモート ホストと接続している間は NetworkStream#Read メソッドはブロッキングしますが、リモート ホストが接続を切断した場合、ストリームは末尾に達します。つまり、 NetworkStream#Read メソッドはすぐに 0 を返します。

NetworkStream インスタンスは使い終わったら閉じる必要があります。閉じるには NetworkStream#Close メソッドを呼び出します。 NetworkStream インスタンスを閉じてもネットワーク接続は閉じません。

stream.Close();

切断


切断するには TcpClient#Close メソッドを呼び出します。

tcpClient.Close();

TCP リスナーの使用方法


TcpListener クラスはネットワーク クライアントからの接続を待機します。同期ブロッキング モードで動作します。

接続要求の待機


コンストラクタにバインドするローカル IP アドレスとポート番号を指定します。

IPAddress ip = Dns.Resolve("localhost").AddressList[0];
TcpListener tcpListener = new TcpListener(ip, 8888);

ローカル IP アドレスが複数存在しそのどれを割り当てても良い場合、 IPAddress.Any を指定することができます。

TcpListener tcpListener = new TcpListener(IPAddress.Any, 8888);

TcpListener#Start メソッドを呼び出すと、ローカル エンド ポイントにバインドし、ネットワーク クライアントによる接続の待機を開始します。

tcpListener.Start();

接続の確立


TcpListener クラスは、ネットワーク クライアントからの接続要求を待ち行列に追加します。 TcpListener#AcceptTcpClient メソッドを呼び出すと、待ち行列から接続要求を取得し、接続を確立します。

TcpClient tcpClient = tcpListener.AcceptTcpClient();

待ち行列に接続要求が存在しない場合、接続要求が来るまでブロックされます。 TcpListener#Pending メソッドを呼び出すと、待ち行列に接続要求が存在するかどうかを判断することができます。

待機の終了


TcpListener#Stop メソッドを呼び出すと、接続要求の待機を終了し、ローカル エンド ポイントはアンバインドします。

tcpListener.Stop();

既に接続が確立した TcpClient インスタンスは 1 つずつ閉じる必要があります。
2005年12月25日(日) 20:34:10 Modified by uguuxp




スマートフォン版で見る