次の方法で共有


TCP サービスの使用

TcpClient クラスは、TCP を使用してインターネット リソースからのデータを要求します。TcpClient のメソッドやプロパティを使用すると、TCP を使用してデータを要求および受信するための Socket の作成について詳細を考慮する必要がなくなります。リモート デバイスへの接続がストリームとして表されるため、.NET Framework のストリーム処理技術によってデータを読み書きできます。

TCP プロトコルは、リモートのエンドポイントとの接続を確立してから、その接続を使用してデータ パケットの送受信を行います。TCP は、データ パケットが確実にエンドポイントに送信され、着信時に正しい順序で組み立てられるようにします。

TCP 接続を確立するには、必要なサービスをホストするネットワーク デバイスのアドレスと、そのサービスが通信に使用する TCP ポートを把握しておく必要があります。一般的なサービスが使用するポート番号は IANA (Internet Assigned Numbers Authority) が定義しています。http://www.iana.org/assignments/port-numbers (英語情報) を参照してください。IANA の一覧に記載されていないサービスは、1,024 ~ 65,535 の範囲のポート番号を使用できます。

TCP のポート番号 13 でタイム サーバーに接続するように TcpClient を設定するコード例を次に示します。

Imports System
Imports System.Net.Sockets
Imports System.Text

Public Class TcpTimeClient
    Private const portNum As Integer = 13
    Private const hostName As String = "host.contoso.com"
    
    ' Entry point  that delegates to C-style main Private Function.
    Public Overloads Shared Sub Main()
        System.Environment.ExitCode = _
            Main(System.Environment.GetCommandLineArgs())
    End Sub
    
    
    Overloads Public Shared Function Main(args() As [String]) As Integer
        Try
            Dim client As New TcpClient(hostName, portNum)
        
            Dim ns As NetworkStream = client.GetStream()
            
            Dim bytes(1024) As Byte
            Dim bytesRead As Integer = ns.Read(bytes, 0, bytes.Length)
            
            Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytesRead))
        
        Catch e As Exception
            Console.WriteLine(e.ToString())
        End Try
        
        client.Close()
        
        Return 0
    End Function 'Main
End Class 'TcpTimeClient
using System;
using System.Net.Sockets;
using System.Text;

public class TcpTimeClient {
    private const int portNum = 13;
    private const string hostName = "host.contoso.com";

    public static int Main(String[] args) {
        try {
            TcpClient client = new TcpClient(hostName, portNum);

            NetworkStream ns = client.GetStream();
            
            byte[] bytes = new byte[1024];
            int bytesRead = ns.Read(bytes, 0, bytes.Length);

            Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead));

            client.Close();

        } catch (Exception e) {
            Console.WriteLine(e.ToString());
        }

        return 0;
    }
}

TcpListener は、TCP ポートに着信する要求を監視し、要求が着信すると、クライアントへの接続を管理する Socket または TcpClient のいずれかを作成します。ポート上でのリッスンを有効にするには Start メソッドを使用し、無効にするには Stop メソッドを使用します。AcceptTcpClient メソッドは、着信した接続要求を受け入れ、TcpClient を作成して要求を処理しますが、AcceptSocket メソッドは、着信した接続要求を受け入れ、Socket を作成して要求を処理します。

TcpListener を使用して TCP のポート番号 13 を監視するネットワーク タイム サーバーを作成するコード例を次に示します。着信した接続要求が受け入れられると、このタイム サーバーは応答としてホスト サーバーの現在の日時を返します。

Imports System
Imports System.Net.Sockets
Imports System.Text

Public Class TcpTimeServer
    
    Private const portNum As Integer = 13
    
    ' Entry point that delegates to C-style main Private Function.
    Public Overloads Shared Sub Main()
        System.Environment.ExitCode = _
            Main(System.Environment.GetCommandLineArgs())
    End Sub
    
    
    Overloads Public Shared Function Main(args() As [String]) As Integer
        Dim done As Boolean = False
        
        Dim listener As New TcpListener(portNum)
        
        listener.Start()
        
        While Not done
            Console.Write("Waiting for connection...")
            Dim client As TcpClient = listener.AcceptTcpClient()
            
            Console.WriteLine("Connection accepted.")
            Dim ns As NetworkStream = client.GetStream()
            
            Dim byteTime As Byte() = _
                Encoding.ASCII.GetBytes(DateTime.Now.ToString())
            
            Try
                ns.Write(byteTime, 0, byteTime.Length)
                ns.Close()
                client.Close()
            Catch e As Exception
                Console.WriteLine(e.ToString())
            End Try
        End While
        
        listener.Stop()
        
        Return 0
    End Function 'Main
End Class 'TcpTimeServer
using System;
using System.Net.Sockets;
using System.Text;

public class TcpTimeServer {

    private const int portNum = 13;

    public static int Main(String[] args) {
        bool done = false;
        
        TcpListener listener = new TcpListener(portNum);

        listener.Start();

        while (!done) {
            Console.Write("Waiting for connection...");
            TcpClient client = listener.AcceptTcpClient();
            
            Console.WriteLine("Connection accepted.");
            NetworkStream ns = client.GetStream();

            byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());

            try {
                ns.Write(byteTime, 0, byteTime.Length);
                ns.Close();
                client.Close();
            } catch (Exception e) {
                Console.WriteLine(e.ToString());
            }
        }

        listener.Stop();

        return 0;
    }
    
}

参照

概念

TCP/UDP