KManishS Ответов: 0

Прослушиватель Tcp в ASP .NET


Привет эксперты,
я создаю веб-приложение, где мне нужно прослушивать порт, если данные приходят, записывайте их на этикетку.
ниже приведен мой код, но он вообще не работает. я написал код для консольного приложения, которое работает нормально, и то же самое я должен сделать с asp.net веб-приложение. ниже приведен мой код

public partial class _Default : System.Web.UI.Page
{
    static int SERV_TCP_PORT = 8080;
    static string SERV_HOST_ADDR = "151.0.23.181";
    static IPAddress ipAd = IPAddress.Parse(SERV_HOST_ADDR);

    protected void Page_Load(object sender, EventArgs e)
    {
        Thread t = new Thread(new ThreadStart(ListenData));
        t.Start();
    }

    public void ListenData()
    {
        TcpListener myList = new TcpListener(ipAd, SERV_TCP_PORT);
        /* Start Listeneting at the specified port */
        myList.Start();
        Console.WriteLine("The server is running at port ..." + SERV_TCP_PORT);
        Console.WriteLine("The local End point is  :" + myList.LocalEndpoint);
        Console.WriteLine("Waiting for a connection.....");
        Socket socket = myList.AcceptSocket();
        Console.WriteLine("Connection accepted from " + socket.RemoteEndPoint);
        byte[] bytes = new byte[7];
        int a = socket.Receive(bytes);
        Label1.Text = Encoding.ASCII.GetString(bytes).ToString();
        //  Label1.Text = "xx";
    }
}


пожалуйста, веди меня... СРОЧНО

Что я уже пробовал:

i have tried the above written code but it is not working, throw exception:
<pre>Only one usage of each socket address (protocol/network address/port) is normally permitted

F-ES Sitecore

Этот код все равно не сработает, asp.net это технология request\response, для того чтобы иметь ответ, который вы можете написать (например, обновить метки), вам нужен запрос от веб-браузера, в то время как ваш код отвечает на данные, поступающие в сокет.

Вам нужно будет реализовать какой-то механизм опроса, когда у клиента есть js, который неоднократно запрашивает код сервера, нужно ли обновлять его метку, или, может быть, посмотреть что-то вроде Signalr. В нынешнем виде это решение не соответствует asp.net архитектура.

CodeWraith

Верно, но может быть и альтернатива. Он может работать, чтобы сохранить прослушиватель в кэше, где он не будет уничтожен при выгрузке страницы. Теперь он может продолжать прослушивать запросы между страницами и может быть извлечен в любое время, когда страница запрашивается.

Теперь нам нужно только хорошее место для метода обратного вызова, который получает входящие данные и хранит их таким образом, чтобы можно было извлекать их всякий раз, когда это необходимо. И наконец, нам также нужен кусочек кода, который надежно очищает слушателя, когда он больше не нужен.

Возможно, он и не предназначен для такого использования, но я думаю, что смогу сделать это без каких-либо зловещих небезопасных взломов.

F-ES Sitecore

Мой ответ вроде как предполагал, что ты все это сделал. IIS по-прежнему может остановить ваше приложение в любое время, хотя вы не можете заставить его работать всегда.

CodeWraith

Я не оперативник. :-)

Windows также может закрыть консольное приложение в любое время, когда захочет, просто для обновления. На самом деле, это очень хороший аргумент против Windows, когда вы не можете позволить себе, чтобы какая-то служба была отключена.

F-ES Sitecore

Я знаю, что ты не оперативник.

CodeWraith

Тогда я не совсем понимаю, что вы имели в виду, говоря: "мой ответ вроде как предполагал, что вы все это сделали".

F-ES Sitecore

Вы хотите, чтобы я объяснил вам английский язык? :)

CodeWraith

Да, пожалуйста. Вы написали: "мой ответ вроде как предполагал, что вы все это сделали" - в своем первом ответе на все, что я написал.

Итак, вы, очевидно, экстрасенс и знали заранее, что я собираюсь написать, или вы приняли меня за ОП.

F-ES Sitecore

Ваш ответ-это не тот ответ, который дал бы ОП, поскольку он показывает знание на один шаг дальше того, что ОП не смог понять в первую очередь. Поэтому, когда я сказал "предполагая, что вы сделали все это", я имел в виду" вас", как того, кто реализовывал решение, а не" вас", как человека.

CodeWraith

А, ладно.

Вернемся к теме: для новичка может быть слишком легко ошибиться в жерехе .Чистая страница и ее жизненный цикл с чем-то вроде WindowsForms. Возможно, это уже помогло бы ему понять, почему он не может просто поместить код из консольного приложения на веб-страницу и ожидать, что это сработает, даже если он запустит поток.

Кстати, я бы тоже этого избегал. Если я правильно помню, вы также можете позволить слушателю работать асинхронно, и вам не придется возиться с потоками самостоятельно. Я думаю, что он скопировал это с какого-то образца, не совсем понимая его.

Super Superman

Из сообщения об ошибке, которое вы опубликовали, вы проверили, что у вас есть правильный IP-адрес? Вы пробовали другой порт (то есть не 80 или 8080)?

0 Ответов