Как создать список TCP IP для чтения входящих сообщений с использованием класса сокетов chilkat c #

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

У нас есть несколько клиентов, которые будут подключаться и отправлять текстовые сообщения на один и тот же порт и IP.

Но я не могу этого добиться. Мне нужно создать Listener, который будет продолжать слушать, и как только я получу какое-либо сообщение, мне нужно его обработать. Любой человек, который использовал класс chilkat или имеющий опыт работы с таким приложением, любезно подскажет мне, как я могу достичь этой функциональности, поскольку я не смог найти хороший пример для этого типа приложения на веб-сайте CHILKAT или, возможно, я неопытен, не знаю как точно кодировать этот тип функциональности.

Изменить 1: Джерми,

да, мы разработали службы REST WCF, и они работают отлично, но проблема в том, что в ответе службы REST WCF появляются большие заголовки ответов, которые нам не нужны, потому что в нашем корпоративном приложении мобильные телефоны с Windows Phone 7 также будут связываться и отправлять текстовые сообщения, и только ради мобильных мы пытаемся сократить объем данных, которые нам нужно передать обратно, и с помощью сокетов мы можем избежать лишних заголовков ответов, а SMS не вариант для нас из-за стоимости. Если у вас есть какие-либо предложения относительно веб-сервисов по минимизации данных, пожалуйста, поделитесь ими.


person Shax    schedule 07.11.2011    source источник
comment
Есть ли какая-то особая цель использовать Chilkat вместо классов в System.Net и System.Net.Sockets?   -  person L.B    schedule 08.11.2011
comment
L.B, потому что в настоящее время мы используем chilkat в других частях нашего приложения для криптографии, и из-за его простоты мы выбрали chilkat. Но похоже, что сокет chilkat может быть не идеальным вариантом в нашем сценарии, или, возможно, я не могу его правильно использовать.   -  person Shax    schedule 08.11.2011
comment
У спокойных сервисов нет мыльных заголовков, которые отягощают вас, поэтому я думаю, что сокеты - это вариант. Проверьте мою правку.   -  person Jeremy    schedule 08.11.2011
comment
@Shax may be I am not able to utilize it properly Это наиболее вероятный случай. Но у вас больше шансов получить помощь с сокетами Windows.   -  person L.B    schedule 08.11.2011
comment
@JeremyChild, вы сказали, проверьте мою правку. Где ваша правка или то, что вы редактировали, не удалось найти вашу правку Джереми.   -  person Shax    schedule 08.11.2011
comment
@Shax мой босс был через мое плечо, пришлось ждать подходящего времени.   -  person Jeremy    schedule 08.11.2011
comment
@Shax Я просто запутаю какой-то код, который у меня здесь, он немного староват, но делает то, о чем я говорю.   -  person Jeremy    schedule 08.11.2011


Ответы (1)


Вы рассматривали веб-сервис? Их можно использовать практически на любом языке, который может отправлять запросы Http. Если у вас есть контроль над клиентскими приложениями, тогда веб-служба определенно является правильным маршрутом.

http://sarangasl.blogspot.com/2010/09/create-simple-web-service-in-visual.html

Редактировать:

Рассматривали ли вы простую загрузку байтов http с кодом ответа http. Т.е. Http Ok, Http Failure. Вы можете настроить коды состояния на все, что подходит вашему проекту.

Изменить 2:

Возможно, в качестве ответа может подойти метод в стиле RPC с ТОЛЬКО кодами состояния http. Проверяет этот вопрос на подсказки. вызов json с C #

В основном вы просто отправляете некоторую строку на URL-адрес, а затем получаете код состояния обратно. Это совсем минимум.

Изменить 3:

Вот кое-что, что я извлек из старого кода с помощью Reflector. Это только для общей сути процедуры. Очевидно, что в первом запросе должен быть оператор using.

public void SMS(Uri address, string data)
{

   // Perhaps string data is JSON, or perhaps its something delimited who knows.
   // Json seems to be the pretty lean.
    try
    {
        HttpWebRequest request = (HttpWebRequest) WebRequest.Create(address);
        request.Method = "POST";
        // If we don't setup proxy information then IE has to resolve its current settings
        // and adds 500+ms to the request time.
        request.Proxy = new WebProxy();
        request.Proxy.IsBypassed(address);
        request.ContentType = "application/json;charset=utf-8";
        // If your only sending two bits of data why not add custom headers?
        // If you only send headers, no need for the StreamWriter.
        // request.Headers.Add("SMS-Sender","234234223");
        // request.Headers.Add("SMS-Body","Hey mom I'm keen for dinner tonight :D");
        request.Headers.Add("X-Requested-With", "XMLHttpRequest");
        StreamWriter writer = new StreamWriter(request.GetRequestStream());
        writer.WriteLine(data);
        writer.Close();
        using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
        {
            using (Stream stream = response.GetResponseStream())
            {
                // Either read the stream or get the status code and description.
                // Perhaps you won't even bother reading the response stream or the code 
                // and assume success if no HTTP error status causes an exception.
            }
        }
    }
    catch (WebException exception)
    {
        if (exception.Status == WebExceptionStatus.ProtocolError)
        {
            // Something,perhaps a HTTP error is used for a failed SMS?
        }
    }
}

Не забудьте отвечать только кодами состояния и описаниями HTTP. И убедитесь, что прокси-сервер запроса настроен на обход запрашивающего URL-адреса, чтобы сэкономить время на разрешении прокси-сервера IE.

person Jeremy    schedule 07.11.2011
comment
Джерми, пожалуйста, проверьте Редактировать 1 оригинального сообщения, которое я добавил для вас. - person Shax; 08.11.2011
comment
Нет, я не мог попробовать, честно говоря, я не знаю об этом. Не могли бы вы дать мне хороший учебник, где я могу использовать загрузку HTTP и получить как можно минимум ответ. - person Shax; 08.11.2011
comment
Джереми спасибо за ответ, я понял, теперь я собираюсь это исправить. - person Shax; 08.11.2011