2013-03-27 138 views
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(); 
     } 
    } 
} 

正如你所看到的,程序试图连接到使用特定端口号特定网站。

如何修改程序,以便我可以知道数据是否在连接后通过特定端口发送?也许计算发送的字节数或文件的类型?谢谢:)

+1

你想达到什么目的?你想从这个程序发送数据到雅虎,或者你是否有兴趣雅虎是否将数据发送到您的程序? – 2013-03-27 12:32:37

+0

@DavinTryon我想检查一下从我的电脑发送给雅虎的数据量。我想详细说明这个程序,以防止键盘记录器。换句话说,如果数据未经用户同意而发送,则可能存在安装了键盘记录程序或其他恶意软件的可能性。很明显,我还会检查FTP和电子邮件端口,以使其成为可能。 – Matthew 2013-03-27 12:35:12

+1

嗯,你是否担心另一个进程拦截网络流量?也许你应该看看通过TLS确保沟通渠道的安全吗? [这里是一个链接](http://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj150597.aspx) – 2013-03-27 12:40:41

回答

1

有几种可能性。首先,您可以在套接字上调用Accept并使程序阻塞,直到数据可用。只要数据可用,您可以将Receive数据转换为字节数组并在其上工作。

其次,您可以拨打BeginAccept并异步等待数据到达并相应地处理它。

请参阅C#中套接字上的documentation

+0

谢谢。我正在阅读文档。 – Matthew 2013-03-27 12:32:39