【问题标题】:How to dynamically change ip address of client in c#?如何在c#中动态更改客户端的IP地址?
【发布时间】:2014-10-16 17:38:28
【问题描述】:

在我的客户端-服务器 winform 应用程序中,每次运行时都想更改客户端的 IP 地址。 一个文本框应该获取我的客户端的 IP 地址,然后使用同一台计算机上的本地 IP 连接到服务器。

客户端代码:

 public partial class Form1 : Form
    {
        System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
        NetworkStream serverStream;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        public void ConnectToServer()
        {
            string server_localip = GetLocalIP();
            clientSocket.Connect(server_localip, 8888);

        }

        public void SendData(string dataTosend)
        {
            if (string.IsNullOrEmpty(dataTosend))
                return;
            NetworkStream serverStream = clientSocket.GetStream();
            byte[] outStream = new byte[33];
            outStream = System.Text.Encoding.ASCII.GetBytes(dataTosend);
            serverStream.Write(outStream, 0, outStream.Length);
            serverStream.Flush();


        }

        public void CloseConnection()
        {
            clientSocket.Close();
        }
        public string ReceiveData()
        {
            StringBuilder message = new StringBuilder();
            serverStream = clientSocket.GetStream();
            serverStream.ReadTimeout = 100;
            //the loop should continue until no dataavailable to read and message string is filled.
            //if data is not available and message is empty then the loop should continue, until
            //data is available and message is filled.
            while (true)
            {
                if (serverStream.DataAvailable)
                {
                    int read = serverStream.ReadByte();
                    if (read > 0)
                        message.Append((char)read);
                    else
                        break;
                }
                else if (message.ToString().Length > 0)
                    break;
            }
            return message.ToString();
        }
        public string GetLocalIP()
        {
            IPHostEntry host;
            host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (IPAddress ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            return "127.0.0.1";
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            ConnectToServer();
            btnConnect.Text = "Connected";
        }

        private void btnRegister_Click(object sender, EventArgs e)
        {
            //if (!Regex.IsMatch(txtPrivateId.Text, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"))
            //{
            //    lblError.Text ="Please type a valid IMPI.";
            //}
            //if (!Regex.IsMatch(txtPublicId.Text, "[^0-9]"))
            //{
            //    lblError.Text = lblError.Text + "\nPlease type a valid IMPU.";
            //}
            //else
            //{
            lblError.Text = "";


            string data = txtPrivateId.Text + ";" + txtPublicId.Text;
            for (int i = 0; i < 1; i++)
            {
                SendData(data);
            }

            string rec = null;
            rec = ReceiveData();
            txtReceive.Text = rec;
        }
    }

任何指导将不胜感激..

【问题讨论】:

  • 只有当您可以保证您的应用程序将以具有提升权限的管理员身份运行时,您才能执行此操作。
  • 是的,我将在我的计算机上运行它(我是管理员)。我这样做是为了测试我的服务器将如何响应来自不同客户端(具有不同 IP)的请求。

标签: c# ip client


【解决方案1】:

您可以使用 netsh 更改您的 IP 地址:

netsh interface ip set address [adapter name] static [ip address] [subnet mask] [gateway] [interface metric]

试试下面的代码:

Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo("netsh", "interface ip set address \"Local Area Connection\" static 192.168.0.10 255.255.255.0 192.168.0.1 1");
p.StartInfo = psi;
p.Start();

请记住,您的应用程序应该在提升的权限下运行。
“本地连接”应与您的适配器名称匹配
有关 netsh 命令行开关的更多信息,请访问下面的 Microsoft 知识库文章:
http://support.microsoft.com/kb/242468

【讨论】:

  • 首先确保您正确输入了适配器名称。您也可以从命令行提示符测试 netsh 命令
猜你喜欢
  • 2020-06-12
  • 1970-01-01
  • 2011-12-03
  • 2015-05-05
  • 2015-09-07
  • 2016-01-26
  • 2016-10-01
  • 2017-10-04
  • 2012-06-06
相关资源
最近更新 更多