如题:我想在我的bs结构程序中使用如上方法,不知道能不能做?
还有就是我现在在网上找了个关于以上编程的cs程序,但是由于自己从来都没接触过类似的功能,这次实属赶鸭子上架头一回,于是还有很多疑问!就是网上的例子大多都是一个客户端一个服务端,也就是1对1模式,如果我想做的是1个服务端多个(随着用户多少而定)客户端程序应该怎么做?
下面就是我的代码:(服务端程序如下)
 static void Main(string[] args)
       {
            int port = 2000;//默认端口
       //创建终结点(EndPoint)
            IPAddress ip = System.Net.IPAddress.Any;//把ip地址字符串转换为IPAddress类型的实例
            IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例         //创建socket并开始监听
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
            s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
            s.Listen(0);//开始监听
            Console.WriteLine("等待客户端连接...");         //接受到client连接,为此连接建立新的socket,并接受信息
            Socket temp = s.Accept();//为新建连接创建新的socket
            Console.WriteLine("建立连接");
            string recvStr = "";
            byte[] recvBytes = new byte[1024];
            int bytes;
            bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
           recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);         //给client端返回信息
            Console.WriteLine("客户端发来信息:{0}", recvStr);//把客户端传来的信息显示出来
            string sendStr = "123";
            byte[] bs = Encoding.ASCII.GetBytes(sendStr);
            temp.Send(bs, bs.Length, 0);//返回信息给客户端
            Console.WriteLine("发往客户端信息:{0}", sendStr);//把客户端传来的信息显示出来
            temp.Close();
            s.Close();
            Console.ReadLine();
        }
(客户端程序)
 static void Main(string[] args)
        {
            try
            {
                int port = 2000;
                string host = "127.0.0.1";
                //创建终结点EndPoint
                IPAddress ip = IPAddress.Parse(host);
                IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例                //创建socket并连接到服务器
                Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
                Console.WriteLine("连接中…");
                c.Connect(ipe);//连接到服务器                //向服务器发送信息
                string sendStr = Console.ReadLine();
                byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节
                Console.WriteLine("Send Message:{0}", sendStr);
                c.Send(bs, bs.Length, 0);//发送信息                //接受从服务器返回的信息
                string recvStr = "";
                byte[] recvBytes = new byte[1024];
                int bytes;
                bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                Console.WriteLine("服务端出来信息:{0}", recvStr);//显示服务器返回信息
                //一定记着用完socket后要关闭
                c.Close();
                Console.ReadLine();
                //Console.ReadKey();
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine("argumentNullException: {0}", e);
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException:{0}", e);
            }
            Console.WriteLine("Press enter to Exit");
        }

解决方案 »

  1.   


    这是实情,网上的所谓范例甚至博客中的所谓“聊天”程序,大多是拿这类“作品”出来。使用.net开发大系统的门槛如此低,以至于许多假技术总监都从java转行.net了。不过使用asp.net创建所谓tcp服务是不恰当的。asp.net更应该作为一个应用客户端,比如一个asp.net网站去访问真正的企业服务器系统(而不是简单地访问本地关系数据库),来显示到网站上。想想asp.net网站架构就知道,asp.net网站随时可能重启(遇到千百种问题时)以自我维护网站的持续运行,并且asp.net网站并不在乎最高的响应速度而是在乎最高的吞吐速度(它不是提供给人像玩游戏一样的响应速度,而是提供给人茶余饭后欣赏内容的)。而一个真正的服务器系统是用来支持各种tcp、http、udp等等各传输话协议、以及各种业务应用协议。如果你要写一个服务器程序,就要让asp.net网站、vb的桌面程序、java的手机程序等等都能统一地访问它。
      

  2.   

    哦sorry,因为刚刚同时打开了asp.net论坛上的帖子,脑子被影响了,还以为lz的问题是问如何在asp.net中创建socket服务的问题。lz最好给个简洁清晰的问题,你贴的那类代码我不太可能先去看它们,除非你给出描述。
      

  3.   

    作为任何客户端,最简单地访问服务器的写法只是类似这样:var x = new TcpClient(AddressFamily.InterNetwork);
        x.Connect(host, port);
        var st = x.GetStream();
        st.Write(sendDatas, 0, sendDatas.Length);
        st.Flush();
        var buffer=new byte[40960];
        var len= st.Read(buffer, buffer.Length);然后buffer中前len个字节就是读取到的数据。当然,如果读取的结果会大于40k,那么应该是一个循环接收buffer内容并合并到一个大的buffer中。这没有什么技术含量,可以先去编程。
      

  4.   

    你好!我的那些代码确实是没有什么实际意义!而我实际想要实现的功能是在网站上查看检测仪器返回的数据信息功能!比如检测仪检测到数据异常我要能看到!还有就是我可以针对某1个或多个仪器进行信号收集!因为网上的例子都是c/s模式!我想知道的是在b/s中该技术是不是也能实现!