c#网络连接的问题

本文关键字:问题 连接 网络 | 更新日期: 2023-09-27 18:06:41

我正在尝试为我的笔记本电脑制作一个应用程序,以防我忘记注销,我可以使用我的智能手机通过使用特定的应用程序注销。所以我在想通常如果你有路由器…你有一个问题,因为你没有外部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;
    }

但是当我尝试使用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"它工作,但如果我把字符串地址它不

c#网络连接的问题

不能绑定属于路由器的外部地址。

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

你不能直接访问你的笔记本电脑的原因是因为你的路由器,像大多数路由器一样是NAT(网络地址转换)路由器。它允许多台计算机隐藏在一个IP地址后面。因此,路由器将有一个公共IP地址,而您的笔记本电脑和路由器后面的其他设备将有一个私有IP地址(例如192.168.x.x范围内的那些)

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