• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
工作,退一步海阔天空;爱情,退一步人去楼空。
睡眠是一门艺术--谁也无法阻挡我追求艺术的脚步!
博客园    首页    新随笔    联系   管理    订阅  订阅
Socket 初识 用Socket建立一个简易Web服务器

 

摘自《Asp.Net 本质论》作者:郝冠军

//在.Net中。system.Net命名空间提供了网络编程的大多数数据据类型以及常用操作,其中常用的类型如下:
/*
IPAddress 类表示一个IP地址
* IPEndPoint类用来表示一个IP地址和一个端口号的组合,成为网络的端点。
* System.Net.Sockets命名空间中提供了基于Socked编程的数据类型。
* Socket类封装了Socked的操作。
* 常见的操作:
* Listen:设置基于连接通信的Socket进入监听状态,并设置等待队列的长度。
* Accept:等待一个新的连接,当新的连接到达的时候,返回一个针对新连接的Socket对象。通过这个新的Socket对象,可以与新连接通信。
* Receive:通过Socked接受字节数据,保存到一个字节数组中,返回实际接受的字节数。
* Send:通过Socked发送预先保存在字节数组中的数据。
*/

 1 class Socket_Study
 2     {
 3         public void CreateSocket()
 4         {
 5             //获得本机的loopback网络地址,即127.0.0.1
 6             IPAddress address = IPAddress.Loopback;
 7             //创建可以访问的端点,8974 为0表示一个空闲的端口号
 8             IPEndPoint endpoint = new IPEndPoint(address, 8974);
 9             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
10             socket.Bind(endpoint);
11             socket.Listen(10);
12             Console.WriteLine("开始监听,端口号:{0}",endpoint.Port);
13             while (true)
14             {
15                //开始监听,这个方法会阻塞线程的执行,知道接收到一个客户端的连接请求
16                 Socket client = socket.Accept();
17                 Console.WriteLine(client.RemoteEndPoint);
18                 //准被读取客户端请求的数据,读取的数据放在一个数组中
19                 byte[] buffer = new byte[4096];
20 
21                 int lentth = client.Receive(buffer, 4096, SocketFlags.None);
22 
23                 string requeststring = Encoding.UTF8.GetString(buffer, 0, lentth);
24 
25                 Console.WriteLine(requeststring);
26                 //回应状态行
27                 string statusLine = "Http/1.1 200 ok \r\n";
28                 byte[] statusLineBytes = Encoding.UTF8.GetBytes(statusLine);
29                 //准备发送到客户端的网页
30                 string responseBody = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head runat=\"server\"> <title>Socket Study </title></head><body><form id=\"form1\" runat=\"server\"><div>Hello World ,Socket Study </div> </form></body></html>";
31                 byte[] responseBytes = Encoding.UTF8.GetBytes(responseBody);
32                 string responseHeader = string.Format("Content-type:text/html; charset=UTF-8 \r\nContent-length:{0}\r\n", responseBody.Length);
33                 byte[] responseHeaderBytes = Encoding.UTF8.GetBytes(responseHeader);
34                 //向客户端发送状态信息
35                 client.Send(statusLineBytes);
36                 //发送回应头
37                 client.Send(responseHeaderBytes);
38                 client.Send(new byte[]{13,10});
39                 //发送内容
40                 client.Send(responseBytes);
41                 client.Close();
42                 if (Console.KeyAvailable)
43                 {
44                     break;
45                 }
46                 socket.Close();
47             }
48         }
49     }
View Code

 

  运行之后打开浏览器 输入地址:http://localhost:8974/

   即可看到结果。

posted on 2014-04-29 16:29  lengp  阅读(587)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3