zoukankan      html  css  js  c++  java
  • 读书笔记最简单的web服务器:网络插座Socket

    消息的格式:

    直接上代码:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    
    namespace SimpleSocketServer
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 获取本机的Loopback 网络地址 如:127.0.0.1
                IPAddress address = IPAddress.Loopback;
                // 创建可访问的端点,49152表示端口号,如果设置为0 则表示设置一个空闲的端口
                IPEndPoint endpoint = new IPEndPoint(address,49152);
                // 创建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);
                    System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
                    // 把数据类型转化为UTF-8
                    string requestring = utf8.GetString(buffer);
    
                    // 显示客户端的响应
                    Console.WriteLine(requestring);
    
                    // 回应的状态行
                    string statusline = "HTTP/1.1 200 OK\r\n";
                    byte[] statuslinebytes = utf8.GetBytes(statusline);
                    // 发送到客户端的网页
                    string requestHtml = "<html><head><title>测试</title></head><body><h1>您好!</h1></body></html>";
                    byte[] requestHtmlbytes = utf8.GetBytes(requestHtml);
                    // 回应的头部 这里Content-Length的长度要用Byte的长度,不然如果内容有汉字的话显示会不正常
                    string responseHead = string.Format("Content-Type:text/html;charset=UTF-8\r\nContent-Length: {0}\r\n", requestHtmlbytes.Length);
                    byte[] responseHeadBytes = utf8.GetBytes(responseHead);
                    // 向客户端发送状态信息
                    client.Send(statuslinebytes);
                    // 向客户端发送回应头
                    client.Send(responseHeadBytes);
                    // 头部和内容分隔行
                    client.Send(new byte[] { 13,10});
                    // 向客户端发送内容部分
                    client.Send(requestHtmlbytes);
                    // 端口客户端的连接
                    client.Close();
                    if (Console.KeyAvailable)
                    {
                        break;
                    }
                }
    
                socket.Close();
            }
        }
    }

    访问地址:

    http://127.0.0.1:49152/

    效果:



  • 相关阅读:
    分区调整教程
    ArcServer10.1系列产品之ArcGIS Web Adaptor (IIS)
    初次登录github
    java中的关键字
    《构建之法》第二章学习有感
    《构建之法》第一章节学后有感
    第一次写博客
    HashMap 扩容分析
    ArrayList的扩容机制
    古籍研究社系列第6部《迟来的翅膀》读后感……吗?
  • 原文地址:https://www.cnblogs.com/tangruixin/p/2477999.html
Copyright © 2011-2022 走看看