码迷,mamicode.com
首页 > Web开发 > 详细

一个简单的Stocket编程Web服务器

时间:2015-07-29 21:04:31      阅读:1046      评论:0      收藏:0      [点我收藏+]

标签:

  在.Net中,System.Net命名空间提供了网络编程的大多数据类型以及常用操作,其中常用的类型如下:

  IPAddress类表示一个IP地址。

  IPEndPoint类表示一个IP地址和一个端口好的组合。

  System.Net.Socket命名空间中提供了基于Stocket编程的数据类型。

  Socket类封装了Socket的操作。

  常用操作如下:

  Listen:设置连接队列的长度。

  Accept:等待一个新的连接,当通讯到达时候,返回一个针对行连接的Stocket对象。

  Receive:通过Stock接收直接数据,保存到一个字节数组中,返回实际接收的字节数。

  Send:通过Stocket发送预先保留在字节数组中的数据。

  示例代码:

  

static void Main(string[] args)
        {
            //获取本机的Loopback网络地址
            IPAddress address = IPAddress.Loopback;
            //创建可访问的端点
            IPEndPoint endPoint = new IPEndPoint(address, 9494);
            //创建Socket,使用IPv4地址,传输控制协议TCP,双向、可靠、基于连接的字节流
            Socket socket = new Socket(
                AddressFamily.InterNetwork,
                SocketType.Stream,
                ProtocolType.Tcp);
            //讲Socket绑定到端点上
            socket.Bind(endPoint);
            //设置连接队列的长度
            socket.Listen(10);
            Console.WriteLine("开始监听,端口号:{0}。", endPoint.Port);
            while (true)
            {
                //开始监听,这个方法会阻塞线程的执行,直到收到一个客户端的连接请求
                Socket client = socket.Accept();
                //输出客户端地址
                Console.WriteLine(client.RemoteEndPoint);
                //准备读取客户端请求的数据,读取的数据将保存在一个数组中
                byte[] buffer = new byte[4096];
                //接收数据
                int length = client.Receive(buffer, 4096, SocketFlags.None);
                //请请求的数据翻译成UTF-8
                System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
                string requestString = utf8.GetString(buffer, 0, length);
                //显示请求的消息
                Console.WriteLine(requestString);
                //回应执行状态
                string statusLine = "HTTP/1.1 200 OK\r\n";
                byte[] statusLineBytes = utf8.GetBytes(statusLine);
                //准备发送到客户端的网页
                string responseBody = "<html><head><title>From Socket Server</title></head><body><h1>Hello World</h1></body></html>";
                byte[] responseBodyBytes = utf8.GetBytes(responseBody);
                //回应头部
                string responseHeader = string.Format("Content-Type:text/html;charset=UTF-8\r\nContent-Length:{0}\r\n", responseBody.Length);
                byte[] responseHeaderBytes = utf8.GetBytes(responseHeader);


                //向客户端发送状态信息
                client.Send(statusLineBytes);
                //向客户端发送回应头
                client.Send(responseHeaderBytes);
                //头部与内容的分隔行
                client.Send(new byte[] { 13, 10 });
                //向客户端发送内容部分
                client.Send(responseBodyBytes);


                //断开与客户端的连接
                client.Close();
                if (Console.KeyAvailable)
                    break;

            }
            //关闭服务器
            socket.Close();
        }

  运行后,在浏览器中输入http://localhost:9494/,这会出现如下图效果 

  技术分享

  在命令窗口可以看到路下图说输出效果

  技术分享

一个简单的Stocket编程Web服务器

标签:

原文地址:http://www.cnblogs.com/wuxiaohui/p/4687299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!