首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#套接字:如何只获取服务器的IP地址,而无需在客户端键入或修复IPAddress

C#套接字:如何只获取服务器的IP地址,而无需在客户端键入或修复IPAddress
EN

Stack Overflow用户
提问于 2015-08-20 09:29:11
回答 1查看 2.2K关注 0票数 0

在下面的代码中,服务器正在监听端口1214。如果客户端连接到服务器,服务器广播确认消息"Hi“。

问题是

  • 我不想在客户端修复或键入IP地址
  • 如何扫描服务器的所有IPAddress监听端口"1214“在同一个本地网络。并过滤(在列表框中显示)只回复"Hi“消息的IP地址?

请帮帮我

服务器代码-侦听端口1214处的所有传入连接,并在连接后回复"HI“

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace PortScanServer
{
    class Program
    {

        static void Main(string[] args)
        {

            string IP_Adress = "";
        IPHostEntry localComputer = Dns.Resolve("KAUNGSAN-PC");
        IPAddress[] localIP = localComputer.AddressList;

        for (int i = 0; i < localIP.Length; i++) {
            IP_Adress = IP_Adress + localIP[i];
        }

        while (true) {
            try {
                IPAddress ipAd = IPAddress.Parse(IP_Adress);
                TcpListener listener1 = new TcpListener(ipAd, 1214);

                listener1.Start();

                Console.WriteLine("Server is running on portt 1214...");

                Socket s = listener1.AcceptSocket();
                Console.WriteLine("Connection accepted from this IP: " + s.RemoteEndPoint);

                byte[] b = new byte[100];
                int k = s.Receive(b);
                Console.WriteLine("Recieved a bunch of byytes:");

                    for (int i = 0; i < k; i++) {
                       Console.Write(Convert.ToChar(b[i]));
                    }

                ASCIIEncoding asen = new ASCIIEncoding();
                // Only send these bytes if you want the scanner to identify that
                // you are not Kazaa
                s.Send(asen.GetBytes("Hi"));
                Console.WriteLine("\nI sent the client aknowledgement");

                s.Close();
                listener1.Stop();

            }

            catch (Exception e) {
                Console.WriteLine("Ah, poo, an error: " + e);
            }
        }

        }
    }
}

客户端-要求用户键入IP地址。如果IP地址是监听端口1214的套接字,则接收确认消息"HI“。

代码语言:javascript
复制
using System.IO;
using System.Net.Sockets;
using System.Text;

namespace TestPortScan
{
    class Program
    {
        static void Main(string[] args)
        {
            bool sucess;
            String response = "";

            try
            {
                TcpClient myTCPclient = new TcpClient();
                Console.Write("Enter IP of Target: ");
                String IP_Adress = Console.ReadLine(); Console.WriteLine("");
                myTCPclient.Connect(IP_Adress, 1214);
                Stream outputStream1 = myTCPclient.GetStream();

                ASCIIEncoding transEncoded = new ASCIIEncoding();
                byte[] byte1 = transEncoded.GetBytes("Are You Kazaa?");
                outputStream1.Write(byte1, 0, byte1.Length);

                byte[] byte2 = new byte[100];
                int k = outputStream1.Read(byte2, 0, 100);

                for (int j = 0; j < k; j++)
                {
                    response = response + Convert.ToChar(byte2[j]);
                }

                myTCPclient.Close();

                if (response == "Hi")
                {
                    sucess = true;
                }
                else
                {
                    sucess = false;
                }
            }
            catch
            {
                sucess = false;
            }

            if (sucess)
            {
                Console.WriteLine("\nThe Target Reply Hi");
            }
            else
            {
                Console.WriteLine("\nThe Target does not respond");
            }
                String waitForKey = Console.ReadLine();
        }
    }

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2015-08-21 01:04:22

AFAIK是查找特定IP地址是否正在侦听特定套接字的唯一方法,它是尝试打开到它的连接。并在网络might...time消费中迭代每一个可能的IP地址。

您可能想看看ZeroConf,它提供了一种通过DNS发现服务的机制。OS内置了对ZeroConf和服务发现(Bonjour)的支持。其他OSes...might则更棘手。

关于ZeroConf的更多信息

关于其服务发现的更多信息

另一种方法,考虑到您在本地网络上的限制可能是让您的服务器通过UDP广播数据报宣传他们的存在.

但是,这几乎肯定会受到网络地形和防火墙/路由器规则的限制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32114541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档