如何构建TCP IP监听器来读取传入的消息使用socket类c#

本文关键字:消息 socket 读取 何构建 构建 监听器 IP TCP | 更新日期: 2023-09-27 18:13:40

我正在使用chilkat套接字类。问题是我想保持我的套接字打开,让我说我执行我的表单和第一次打开端口在一个特定的IP上监听消息。我能够第一次成功地接收消息,现在在此消息之后,我想让我的应用程序继续侦听并接收任何新消息。

我们有几个客户端,他们将在相同的端口和ip上连接并发送一些文本消息。

但我无法做到这一点。我需要建立一个监听器,它将继续监听,只要我得到任何消息,我需要处理它。任何使用过chilkat类或有这种应用程序经验的人都请建议我如何实现此功能,因为我在chilkat网站上找不到这种应用程序的好例子,或者可能是我没有经验,不知道如何准确地编码这种类型的功能。

编辑1:jeremy,

是的我们开发了REST WCF服务,他们是完美的工作,但问题是在REST WCF服务的反应大响应标头出现,我们不希望因为我们的企业应用Windows Phone 7手机还将进行交流和发送短信,只为了手机我们正在努力减少我们需要回传的数据,通过使用套接字我们可以避免额外的响应头和短信对我们不是一个选择,因为成本。如果您对web服务有任何最小化数据的建议,请与我们分享。

如何构建TCP IP监听器来读取传入的消息使用socket类c#

您考虑过Web Service吗?几乎任何可以发送Http请求的语言都可以使用它们。如果你可以控制客户端应用程序,那么Web服务绝对是正确的路由。

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

编辑:

你有没有考虑过简单的http上传字节,用http响应代码。Http正常,Http失败。你可以自定义任何适合你项目的状态码。

编辑2:

也许一个RPC风格的方法,只有http状态码作为响应可能是合适的。检查这个问题的提示。使用c#

调用

基本上你只是发送一些字符串到一个url,然后接收状态码回来。这是非常小的。

编辑3:

这是我拉出一些旧代码与反射器。这只是程序的一般要点。显然,在第一个请求中应该有一个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代理的时间。