C# Quick Netowrk Programming: Daytime client

Copyright © 2003, Hirofumi Fujii
(LastUpdate: 07-Jul-2003)

はじめに

まずはじめに、簡単な例として Daytime (RFC 867) client プログラムを コンソールアプリケーションとして作ってみる。Client の仕事は、

である。まずはエラー処理も何も考えずに書いてみる。

using System;
using System.Net.Sockets;

class myTcpTest
{
  public static int Main(string [] args)
  {
    if( args.Length != 1 )
    {
      Console.WriteLine( "Give the hostname of the daytime server" );
      return 1;
    }
    Int32 port = 13;
    TcpClient myclient = new TcpClient( args[0], port );
    NetworkStream mystream = myclient.GetStream();
    Byte [] recvdata = new Byte [256];
    String recvstr = String.Empty;
    Int32 nbytes = mystream.Read(recvdata, 0, recvdata.Length);
    recvstr = System.Text.Encoding.ASCII.GetString(recvdata, 0, nbytes);
    Console.Write( recvstr );
    myclient.Close();
    return 0;
  }
}

Byte 列と、String の変換が必要なので、多少ゴタゴタしているが、 基本的に難しい部分は無い。

エラーを捕捉するのも、try - catch で行えばよいので、面倒では 無い。Socket エラーを捉えるように変更してみよう。

using System;
using System.Net.Sockets;

class myTcpTest
{
  public static int Main(string [] args)
  {
    if( args.Length != 1 )
    {
      Console.WriteLine( "Give the hostname of the daytime server" );
      return 1;
    }
    Int32 port = 13;
    try
    {
      TcpClient myclient = new TcpClient( args[0], port );
      NetworkStream mystream = myclient.GetStream();
      Byte [] recvdata = new Byte [256];
      String recvstr = String.Empty;
      Int32 nbytes = mystream.Read(recvdata, 0, recvdata.Length);
      recvstr = System.Text.Encoding.ASCII.GetString(recvdata, 0, nbytes);
      Console.Write( recvstr );
      myclient.Close();
    }
    catch( SocketException e )
    {
      Console.WriteLine( "SocketException: {0}", e );
    }
    return 0;
  }
}