Прослушиватель 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)?