2

私はC#で次のコードを持っています:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace Networking
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("---Connecting to a Host using a Specific Port---");
            Console.WriteLine();
            Console.WriteLine("Attempting Connection...");
            Console.WriteLine();

            string hostname = "www.yahoo.com";
            int port_no = 21; //HTTP = 80, HTTPS = 443, FTP = 21

            IPAddress ipa = (IPAddress)Dns.GetHostAddresses(hostname)[0];

            try
            {
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(ipa, port_no);

                if (socket.Connected == true)
                {
                    Console.WriteLine("The connection was successful!");
                }
            }
            catch (System.Net.Sockets.SocketException ex)
            {
                if (ex.ErrorCode == 10061)
                {
                    Console.WriteLine("The connection was NOT successful!");
                }
                else
                {
                    Console.WriteLine(ex.Message);
                }
            }
            Console.WriteLine();
            Console.WriteLine("Press enter to exit");
            Console.ReadLine();
        }
    }
}

ご覧のとおり、プログラムは特定のポート番号を使用して特定のWebサイトに接続しようとします。

接続後にデータが特定のポートを介して送信されているかどうかを知ることができるように、プログラムをどのように変更できますか?送信されたバイト数やファイルの種類を数えますか?ありがとうございました :)

4

1 に答える 1

1

いくつかの可能性があります。まず、ソケットを呼び出しAcceptて、データが利用可能になるまでプログラムをブロックします。データが利用可能になり次第Receive、バイト配列にデータを格納してこれに取り組むことができます。

次にBeginAccept、データが到着するのを呼び出して非同期的に待機し、それに応じて処理することができます。

C#のソケットに関するドキュメントを参照してください。

于 2013-03-27T12:30:49.143 に答える