socket在asp.net中最好不要用,因为asp.net中的代码是无法长期运行的。页面类仅仅是在收到用户请求的时候被创建,在处理完请求后被销毁。

解决方案 »

  1.   

    windows和控制台程序之所以能用是因为它们可以保证长期运行。如果非要说什么类型的项目不能用,除了web以外,那些不能长期运行的项目,比如dll,或者wf中的一个activity之类的,都不要用。
      

  2.   

    socket一般都是用在控制台、form程序(winform、wpf)等能够持续运行的环境。asp.net也可以使用(你可以将你在控制台里面建立好的socket程序代码完整的复制到aspx后台代码中一样运行),但是不适合做为长期运行的socket服务端,适合做简单的socket客户端程序,去请求socket服务。
      

  3.   

    额,技术是发展,现在其实有websocket把你的vs打开,如果你安装的有mvc4,你会发现你的模版里出现了signalR模版如果你没有装,在vs的库程序管理包中搜索websocket,你会发现有不下50种的各式websocket实现库 
      

  4.   


    除了网页。
    其实我也没写网页里面,写在global.asax.cs里面 了void Application_Start(object sender, EventArgs e)
            {
                // 在应用程序启动时运行的代码
                Zigbee.startMonitor();
            }Zigbee类的静态方法public static void startMonitor()
            {//开启监听
                tcpListener.Start();}
    大致就这样的,这样和写网页里面一样吗?
      

  5.   

    我就是想在网页里面显示通过tcp获取的数据,之前想通过wcf获取,但是wcf里面好像也不能用socket,现在就想找一个中间件,网页和中间件通讯,中间件可以通过tcp获取数据
      

  6.   


    除了网页。补充一下,我又测了一下,是外网连不上,内网能连。外网我通过端口映射到自己电脑的,在winform里面,外网也能连上
      

  7.   

    已经告诉你了,在网页上使用websocket就可以,这个可以实现推送,服务器获取资料后可以直接向前端js推送数据。ps:别以为这些东西太新了不好控制,其实这些玩意很简单滴,成熟程序员大概花2个小时左右就基本可以掌握,另外这东西的宿主也不止web服务器,你甚至可以在服务器以外使用控制台代码提取tcp信息,然后向web服务器里面hub发起请求,要求他对客户端js发送推送信息
    额在说一下signalR这个有多个适配,高版本浏览器可以采用html5的websocket通讯,如果想更通用则可以采用长轮训适配(我测试过长轮训适配在ie6上也可以用)
      

  8.   

    我刚才也看了websocket,它是应用在浏览器端和服务器端的通讯,和ajax类似。但我的需求和那个不一样,下面是一个图:
    这图里面的服务器端不能接收到tcp的连接请求,所以在web页面里面就不能显示tcp传过来的数据
      

  9.   

    额,你前面自己已经说了,winform能连那么我也说了signalR的宿主不是只能是IIS,你大可以在你的window获取信息,然后在同iis里的hub让其往前端js里推送
    http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-host来看这里,控制台程序通知iis对客户发送
      

  10.   

    谢谢各位的解答,问题我找到了。要把web项目部署到iis上面去才能和外网的进行tcp通信,在vs中直接调试不能和外网通信