繁体   English   中英

C#互联网连接问题

[英]Problems with C# internet connection

我正在尝试为我的笔记本电脑制作应用程序,以防我忘记注销,我可以使用我的智能手机通过使用特定的应用程序注销。 所以我通常会想,如果你有路由器...你有一个问题,因为你没有可以使用的外部IP和端口。 为此我用这个函数来获取外部ip。

        public string adresaIP()
    {
        UTF8Encoding utf8 = new UTF8Encoding();
        WebClient clientWeb = new WebClient();
        String adresaIP = utf8.GetString(clientWeb.DownloadData("http://bot.whatismyipaddress.com"));
        return adresaIP;
    }

但是,当我尝试使用te IpEndPoint它不工作它给我一个异常错误,我不知道我做错了。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;


namespace bluetooth_LogOff
{
public partial class Form1 : Form
{
    static byte[] buffer { get; set; }
    static Socket soket;


    public Form1()
    {
        InitializeComponent();
        try
        {
            string ip = adresaIP();

            soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //soket.Bind(new IPEndPoint(IPAddress.Parse(ip),1234)); <<-- in this way dosen't work 

            soket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),1234)); // <<- in this way it works....
            soket.Listen(100);


            Socket accept = soket.Accept();
            buffer = new byte[accept.SendBufferSize];
            int bytesRead = accept.Receive(buffer);
            byte[] format = new byte[bytesRead];
            for (int i = 0; i < bytesRead; i++)
            {
                format[i] = buffer[i];
            }
            string primescMesaj = Encoding.ASCII.GetString(format);
            MessageBox.Show(primescMesaj);
            soket.Close();
            accept.Close();



        }
        catch (Exception messaj)
        {
            MessageBox.Show(messaj.ToString());

        }


    }

    private void button1_Click(object sender, EventArgs e)
    {

        label1.Text = adresaIP();





    }
    public string adresaIP()
    {
        UTF8Encoding utf8 = new UTF8Encoding();
        WebClient clientWeb = new WebClient();
        String adresaIP =    `utf8.GetString(clientWeb.DownloadData("http://bot.whatismyipaddress.com"));`
        return adresaIP;
    }
}

}

但有趣的是,如果我把像“127.0.0.1”这样的地址放在它的工作原理,但是如果我把字符串添加到地址中它就不会

您无法绑定该地址属于路由器的外部地址。

您应该绑定到笔记本电脑上的地址0.0.0.0(所有地址)并配置路由器以转发笔记本电脑端口(或使用UPnP)。

您无法直接访问笔记本电脑的原因是因为您的路由器与大多数路由器一样是NAT(网络地址转换)路由器。 它允许多台计算机隐藏在单个IP地址后面。 因此,路由器将具有公共IP地址,并且您的笔记本电脑和路由器后面的其他设备将具有专用IP地址(例如192.168.xx范围内的那些)

大多数NAT路由器都可以配置静态端口转发; 即,特定私有地址中的端口反映在公共IP中的相同或不同端口中。 这允许从公共互联网访问内部设备。 UPnP是一个执行相同操作的协议,但不需要在路由器上手动配置。 UPnP通常是P2P应用程序和一些多玩家游戏在没有人为干预的情况下获得公共可访问端口的方式。 这也是UPnP可能被视为安全隐患的原因,因为计算机所有者可能不知道这种转发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM