C#TCP客户端自动连接到侦听特定端口的服务器

C#TCP客户端自动连接到侦听特定端口的服务器,c#,server,client,connect,C#,Server,Client,Connect,我似乎很难弄清楚如何让我的客户端应用程序自动连接到在局域网上的另一台机器上运行的服务器应用程序 现在,我能够让客户机连接到服务器的唯一方法是通过在代码中手动指定服务器的IP地址: private TcpClient client = new TcpClient(); private IPEndPoint serverEndPoint = neIPEndPoint(IPAddress.Parse("Server IP address goes here"), 8888); 我的服务器应用程序

我似乎很难弄清楚如何让我的客户端应用程序自动连接到在局域网上的另一台机器上运行的服务器应用程序

现在,我能够让客户机连接到服务器的唯一方法是通过在代码中手动指定服务器的IP地址:

 private TcpClient client = new TcpClient();
 private IPEndPoint serverEndPoint = neIPEndPoint(IPAddress.Parse("Server IP address goes here"), 8888);
我的服务器应用程序使用TCP侦听器,因此我认为我的客户端可以做类似的事情,以便能够找到服务器,但我不知道如何在代码中实现它

我的服务器应用程序中用于查找要连接到的客户端的代码:

private TcpListener tcpListener;
    private Thread listenThread;
    private int connectedClients = 0;
    private delegate void WriteMessageDelegate(string msg);

    public Form1()
    {
        InitializeComponent();
        Server();
    }

    private void Server()
    {
        this.tcpListener = new TcpListener(IPAddress.Any, 8888); 
        this.listenThread = new Thread(new ThreadStart(ListenForClients));
        this.listenThread.Start();
    }
我曾尝试使用一个文本框,用户可以手动输入服务器的IP地址(因为他们无法访问代码),但我认为自动连接会更加方便用户,特别是因为如果用户使用上面的方法设置客户端要连接的IP,我不知道如何永久保存用户的服务器IP地址

所以,我的问题是:对于我来说,什么是使我的客户机能够自动连接到在我的局域网上运行的服务器的最佳方法

谢谢

帕特里克



更新

我尝试实现UDP广播的代码,但似乎无法正常工作

以下是我添加到我的客户机的内容(以及我以前在那里的客户机代码):

以下是我在服务器代码中添加的内容:

private void BroadcastToClients()
    {
        var Server = new UdpClient(8888);
        var ResponseData = Encoding.ASCII.GetBytes("SomeResponseData");

        while (true)
        {
            var ClientEp = new IPEndPoint(IPAddress.Any, 0);
            var ClientRequestData = Server.Receive(ref ClientEp);
            var ClientRequest = Encoding.ASCII.GetString(ClientRequestData);

            Console.WriteLine("Recived {0} from {1}, sending response", ClientRequest, ClientEp.Address.ToString());
            Server.Send(ResponseData, ResponseData.Length, ClientEp);
        }
    }
我想一定有一些冲突的代码在那里,但由于我是如此新的这个,我似乎无法找出它



更新
我仍然没有在这方面取得任何进展。任何人都可以插话,帮助我找出这对我不起作用的原因?

您的客户端应用程序可以在启动时在本地子网上发送广播,“请求服务器”。 您的服务器将侦听该消息,并答复客户端。 现在客户端知道服务器的IP地址,可以启动TCP连接


这里有:

这听起来正是我想要的,但由于这是我在C#中的第一个项目,我不知道如何在代码中实现它。。。你能给我举个例子说明如何做到这一点,或者给我指出正确的方向,让我自己学习如何做到这一点吗?谢谢,我基本上是将答案中的代码直接复制到我现有的代码中吗?正如我所说,我对这一点非常陌生,虽然这个答案看起来像是我的项目所需要的类型,但我不确定如何实现它。很抱歉问了这么一个“新手”问题,但我学到了:)那个片段绝对不是生产质量代码。我们的目标是给您一些见解,以便您可以进一步研究和实施您的解决方案。这就是我所认为的,但是,在我有限的知识范围内,我完全了解如何在不与现有代码冲突的情况下实现它(我需要这些代码,以便我的客户端可以向服务器发送消息)。如果您(或任何其他人)可以尝试向我解释如何实现它(使用我在原始问题中提供的现有客户机和服务器代码),那将非常感谢。我完全不知道该去哪里看,这开始有点伤到我的大脑了,哈哈。谢谢你到目前为止的帮助,我知道这正是我需要实现的类型!我仍然无法在这方面取得任何进一步的进展。还有人想给小费吗?
private void BroadcastToClients()
    {
        var Server = new UdpClient(8888);
        var ResponseData = Encoding.ASCII.GetBytes("SomeResponseData");

        while (true)
        {
            var ClientEp = new IPEndPoint(IPAddress.Any, 0);
            var ClientRequestData = Server.Receive(ref ClientEp);
            var ClientRequest = Encoding.ASCII.GetString(ClientRequestData);

            Console.WriteLine("Recived {0} from {1}, sending response", ClientRequest, ClientEp.Address.ToString());
            Server.Send(ResponseData, ResponseData.Length, ClientEp);
        }
    }