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

  在.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/,这会出现如下图效果 

  

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

  

时间: 2024-10-08 12:24:04

一个简单的Stocket编程Web服务器的相关文章

golang的最简单的文件浏览web服务器

网上看到的,记录下,备用 package main import ( "net/http" ) func main() { http.Handle("/", http.FileServer(http.Dir("./"))) http.ListenAndServe(":8080", nil) } golang的最简单的文件浏览web服务器,布布扣,bubuko.com

Spring学习(二)——使用用Gradle构建一个简单的Spring MVC Web应用程序

1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module,在弹出的窗口的左侧中选择 [Gradle],右侧勾选[Spring MVC],如下图所示: 并勾选[Application server],下方选择框中选择Tomcat7.0,如无该选项,则选中右边的 [ New... ] -- [ Tomcat Server ], 配置 Tomcat .配置好后

node.js基于express框架搭建一个简单的注册登录Web功能

这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注明一下版本,因为express因为版本的不同使用的方式也不同,我这算是目前最新的了吧 还没有装express的可以移步到这里 看看express框架的获取安装 1.简单地项目初始化 进入你的nodejs安装路径下边,如图,然后执行命令  express -e test  (这里把项目名设置为test

TinyWS —— 一个C++写的简易WEB服务器(三)

写在前面 代码已经托管在 https://git.oschina.net/augustus/TinyWS.git 可以用git clone下来.由于我可能会偶尔做一些修改,不能保证git 库上的代码与blog里的完全一致(实际上也不可能把所有的代码都贴在这里).另外,TinyWS是基于linux写的(ubuntu 14.10 + eclipse luna,eclipse工程我也push到了git库),故在Windows上可能无法正常编译(主要是系统调用 部分可能会不同). 前面的内容可参考上一篇

TinyWS —— 一个C++写的简易WEB服务器(一)

写在前面 每个码农可能都会偶尔有自己做一个常用软件的想法,比如操作系统,编译器,邮件服务器/客户端,文字编辑器等等.这里面有些很难,比如操作系统,做一个最简单的也要付出很大的努力,可是大部分常用工具都是可以比较容易的做一个简易版本(当然也是只能玩玩而已).于是我做了一个非常简陋的WEB服务器 —— TinyWS.这里主要是记录下自己整个过程中的一些想法. TinyWS是用C++”从头开始“做的,也就是说,除了C/C++的标准库和操作系统的系统调用,并没有使用第三方库.我并不喜欢C++(甚至有些厌

分布式计算——实现简单的浏览器和web服务器

此次是分布式的第三次作业,作业要求如下: 1.基于TCP通讯(ServerSocket.Socket套接字),编写一个带有图形用户界面的浏览器和 一个支持文档读取并返回给客户浏览器的web服务器.客户端支持超链接事件处理,服务器采用多 线程技术支持并发访问. 2.在此基础上,修改服务器侧设计与实现,使之能够动态地添加客户端请求的类文件,即设计 一个小服务程序容器. 3.试在服务器侧代码中对客户端请求行.请求头和请求体部分进行处理. ================================

Python网络编程——编写一个简单的回显客户端/服务器应用

今天将python中socket模块的基本API学习完后,照着书上的实例编写一个套接字服务器和客户端.采用python3.5版本,在注释中会标明python2和python3的不同之处. 1.代码 (1)服务器端及对应代码解释 1 # ! /usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # 编写回显服务器 4 5 import socket 6 import sys 7 import argparse 8 9 # 定义常量 10 host = 'l

一个简单的ASP.NET Web Forms应用程序

ASP.NET 支持三种不同的开发模式: Web Pages(Web 页面).MVC(Model View Controller 模型-视图-控制器).Web Forms(Web 窗体) 我给大家展示的是Web Forms(Web 窗体) 第一:我们需要了解下,什么是Web Forms. Web Forms 是三种创建 ASP.NET 网站和 Web 应用程序的编程模式中的一种. Web Forms 是最古老的 ASP.NET 编程模式,是整合了 HTML.服务器控件和服务器代码的事件驱动网页.

go语言实现一个简单的登录注册web小程序

最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜: 这个例子使用到了beego框架和beedb框架,如果是go新手beego和beedb得自己去google下载安装. 目录结构: index.go package controllers import ( "fmt" "github.com/astaxie/beego"