Как создать TCP IP listner для чтения входящих сообщений, используя chilkat сокет класса c # - PullRequest
1 голос
/ 08 ноября 2011

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

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

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

Редактировать 1: Джерми,

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

1 Ответ

0 голосов
/ 08 ноября 2011

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

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

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

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

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

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

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

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

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

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.

...