Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Module monkeyServer
Private Const HttpVersion As String = "HTTP/1.1"
Private Const WebTitle As String = "<head><title>Monkey Server</title></head>"
Private ReadOnly ReasonPhrase4() As String = {"Bad Request", "Unauthorized", "", "Forbidden", "Not Found", " Method Not Allowed", "Not Acceptable"}
Private ReadOnly HeadTail() As Byte = {13, 10}
Private Function responseGet(ByVal localURI As String) As String
Return "<html>" & WebTitle & "<body>response for GET method:" & localURI & "</body></html>"
End Function
Private Sub MonkeyClient(ByVal client As Socket)
Dim clientBytes(4096) As Byte
Dim headBytes() As Byte
Dim responseBytes() As Byte
Dim requestHeads() As String
Dim requestLine() As String
Dim clientLen As Integer = 0
Dim headLength As Integer = 0
Dim statusCode As Integer = 0
Dim reasonPhrase As String
Dim responseHead As String = ""
Dim responseBody As String = ""
Console.WriteLine("Client accepted : " & client.RemoteEndPoint.ToString())
Do
Try
clientLen = client.Receive(clientBytes, 4095, SocketFlags.None)
Catch e As Exception
Console.WriteLine(e.Message)
Exit Do
End Try
headLength = 0
For i As Integer = 0 To clientLen - 4
Dim j As Integer
For j = 0 To 3
If HeadTail(j And 1) <> clientBytes(i + j) Then
Exit For
End If
Next
If j > 3 Then
headLength = i
Exit For
End If
Next
statusCode = 400
If headLength > 0 Then
ReDim headBytes(headLength)
Array.Copy(clientBytes, headBytes, headLength)
requestHeads = Split(Text.Encoding.UTF8.GetString(headBytes), vbCrLf)
Erase headBytes
requestLine = requestHeads(0).Split(" ")
If requestLine.Length = 3 Then
If requestLine(2).ToUpper() = HttpVersion Then
statusCode = 200
reasonPhrase = "OK"
Select Case requestLine(0).ToUpper()
Case "GET"
responseBody = responseGet(requestLine(1))
Case Else
statusCode = 501
reasonPhrase = "Not Implemented"
End Select
Else
statusCode = 505
reasonPhrase = "HTTP Version not supported"
End If
End If
Erase requestLine
Erase requestHeads
End If
If statusCode >= 400 And statusCode < 500 Then
reasonPhrase = ReasonPhrase4(statusCode - 400)
End If
'respone status line
client.Send(Text.Encoding.UTF8.GetBytes(HttpVersion & " " & statusCode.ToString() & " " & reasonPhrase & vbCrLf))
If statusCode = 200 Then
responseBytes = Text.Encoding.UTF8.GetBytes(responseBody)
responseHead &= "Content-Type:text/html;charset=UTF-8" & vbCrLf
responseHead &= "Content-Length:" & responseBytes.Length.ToString() & vbCrLf
Else
responseBody = "<html>" & WebTitle & statusCode.ToString & " " & reasonPhrase & "</body></html>"
responseBytes = Text.Encoding.UTF8.GetBytes(responseBody)
responseHead &= "Content-Type: text/html;charset=UTF-8" & vbCrLf
responseHead &= "Content-Length: " & responseBytes.Length.ToString() & vbCrLf
responseHead &= "Connection: Close" & vbCrLf
End If
'response head
client.Send(Text.Encoding.UTF8.GetBytes(responseHead))
client.Send(HeadTail)
'respone body
client.Send(responseBytes)
Erase responseBytes
Loop
Console.WriteLine("client exit :" & client.RemoteEndPoint.ToString())
client.Close()
End Sub
Sub MonkeyServer(ByVal localIP As IPAddress, Optional ByVal dwPort As Integer = 80)
Dim clientThread As Thread
Dim server As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
server.Bind(New IPEndPoint(localIP, dwPort))
Console.WriteLine("Local listening : " & server.LocalEndPoint.ToString())
server.Listen(3)
Do
clientThread = New Thread(New ParameterizedThreadStart(AddressOf MonkeyClient))
clientThread.Start(server.Accept())
Loop
server.Close()
End Sub
Sub Main()
Console.WriteLine("Monkey Web Server")
MonkeyServer(IPAddress.Parse("10.113.11.95"), 80)
End Sub
End Module
相关推荐
【16】linux命令/工具,systemd,文件操作,动静态库,信号,socket
apt install python3-pip --fix-missing(断开vpn,cp /etc/apt/sources.list /etc/apt/sources.list.bak,python3 -m pip install --upgrade pip,apt-get update,pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com)设置时间,联网,apt-get install vim。
vb.net 实现http服务器
http://blog.okbase.net/vbfans/archive/819.html 作者:Eugene Popov 下载源代码:http://www.okbase.net/file/item/23112 介绍 在学习.NET编程时,我试图创建一个简单的web服务器。我有许多HTTP服务器在互联网上,但都比较复杂而且不能调用PHP和EXE文件。所以我决定写一
VB做的HTTP简单服务器源码
VB做的HTTP简单服务器源码 VB做的HTTP简单服务器源码 VB做的HTTP简单服务器源码
用vb.net开发的简易服务器
在这里介绍程序主要实现的功能以及流程。 程序在启动后会开启1个线程,1个定时器,一个线程用来接受来自客户端的连接,定时器用来检测当前有多少个客户连接,当有一个客户连接是,会开启一个线程用来与客户传送消息。为了简单起见,服务器发送消息为广播发送。全局变量: Dim listen_thread As Thread'监听线程 Dim listener As Socket '套接字 Pu
Unreal 5 MetaHuman插件全流程:从安装到角色动画生成
本文详细介绍了Unreal 5中MetaHuman插件的全流程使用指南,从安装配置到角色动画生成。通过Quixel Bridge下载预设角色,利用面部捕捉技术赋予数字人模型生命力,并提供材质编辑、性能优化等进阶技巧,帮助用户快速创建照片级真实的虚拟角色。
Eureka自我保护机制
Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last
.net vb socket 官网示例
Imports System Imports System.Text Imports System.IO Imports System.Net Imports System.Net.Sockets Imports Microsoft.VisualBasic Public Class GetSocket Private Shared Function ConnectSocket(serve
01 AUTOSAR CP标准文档阅读指南
01 AUTOSAR CP标准文档阅读指南
Java网络编程(基于TCP和UDP的通信实现)
简单说一些常见的协议所属的OIS层: 应用层:远程登录协议Telnet、文件传输协议FTP,超文本传输协议HTTP,域名服务DNS,简单邮件传输协议SMTP,邮局协议POP3等 传输层:传输控制协议TCP—-面向连接的可靠传输协议,用户数据报协议UDP—–是无连接的,不可靠的传输协议 网络层:网际协议IP,Internet互联网控制报文协议ICMP、Internet组管理协议IGMP
【学习笔记】无人机(UAV)在3GPP系统中的增强支持(四)-无人机系统(UAS)命令与控制(C2)通信用例
UTM向5G网络提供无人机系统C2通信所需的信息,例如服务类别、无人机系统服务的流量类型、授权的无人机系统服务所需的QoS以及无人机系统服务的订阅。遵循模型B的网络辅助C2模型,为了确保UAS操作的C2通信的服务可用性和可靠性,特别是当无人机在操作员的视线之外(BLOS)飞行时,为无人机提供支持冗余的C2通信链路。如果需要创建额外的C2通信连接或更改现有数据连接的配置以进行C2通信,则5G网络会根据无人机系统的授权服务信息和C2通信中所需的QoS和优先级,修改或分配一个或多个C2通信流量的QoS流。
ransac拟合2D圆(三点定圆 c++详细版)
RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。
在交互性要求强的场合,SilverLight使用Ajax是愚蠢选择
在交互性要求强的场合,SilverLight使用Ajax是愚蠢选择 确切来说,SilverLight是一种嵌入到浏览器的桌面程序,和之前的ActiveX,flash的action script和java的appelt相近。SilverLight比ActiveX更好用...
C#串口通信从入门到精通(21)——一个串口多线程发送数据
本文详细介绍了串口通信中采用多线程发送串口数据的解决方案,由多年实战经验总结,绝对干货!
.NET周刊【7月第4期 2024-07-28】
授权在ASP.NET Core中用于控制对应用资源的访问,它与身份验证相互独立但需要身份验证机制。有三种授权类型:简单授权、基于角色的授权和基于策略的授权。简单授权通过使用Authorize属性限制访问。基于角色的授权根据用户角色控制访问,角色可以在身份创建时指定。基于声明策略的授权使用声明作为身份标识,并通过定义策略和处理程序来实现。自定义策略授权通过要求和处理程序实现更灵活的授权控制。架构是对依赖的统一管理。依赖是持有对象的引用,常见为单向依赖。
使用Python爬虫抓取旅游景点评价数据并进行热度可视化
景点热度通常由景点的评分、评论数以及游客的热情度来决定。高热度的景点通常意味着更高的游客评分和更多的游客评论。热度不仅反映了景点的受欢迎程度,还可以揭示某些景点的潜力和存在的问题。评分:游客对景点的综合评分,通常是0到5分。评论数:景点的评论数量,反映了游客对景点的关注程度。热度变化:在一定时间内,景点的评价和评论数量变化,能够反映景点的热度波动。通过使用Python爬虫技术抓取旅游景点的评价和评论数据,我们能够深入分析景点的热度,并通过数据可视化工具将这些信息展示给用户。
【WRFDA安装第一期】安装 WRFDA 以运行 3DVAR/4DVAR数据同化
【WRFDA安装第一期】安装 WRFDA 以运行 3DVAR/4DVAR数据同化
RRQM_Home/TouchSocket核心模块解析
RRQM_Home/TouchSocket核心模块解析 【免费下载链接】TouchSocket TouchSocket是.Net(包括 C# 、VB.Net、F#)的一个整合性的网络通信框架。包含了socket、 tcp、udp、ssl、namedPipe、http、websocket、rpc、jsonrpc、webap...
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
技术 选对了路吗
1, 在我看来,计算机产业链可看成是一条大河。硬件制造业和数据通讯业是“上游”,软件业则是“下游”。 个人觉得,在学习软件技术时,应该高度关注并下功夫掌握靠近“上游”的“源泉技术”,而非位于“下游”的各种“衍生”技术,只有这样才能以不变应万变。道 理很简单:只要掌握了“源泉”技术,就能以较高的效率掌握由这个“源泉技术”所“衍生”出来的子技术,否则,必然陷入疲于奔命的窘境。...
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
深入CLR运行原理:从IL到GC、JIT与跨语言集成的工程实践
CLR(公共语言运行时)是.NET平台的核心执行引擎,其本质是一套覆盖编译器、运行时、操作系统与硬件的标准化契约体系。它通过ECMA-335规范定义IL指令语义、内存模型、异常传播和类型系统,确保C#、F#等语言在不同平台行为一致。理解CLR的关键在于掌握JIT编译流程——从IL解析、平台适配、寄存器分配到安全桩注入;以及GC机制——包括工作站/服务器模式差异、代际触发逻辑与LOH碎片化治理。这些底层能力直接决定云原生服务的内存稳定性、启动性能与跨平台兼容性。本文结合.NET 6/8真实迁移案例,解析JIT
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
Java实现FTP批量大文件上传下载
用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px; max-width: 99%; position: static; top: 0px; width: 106px; border-style: none; left: 0px; visibility: visibl...
Visual Studio 高效开发:27个真实场景必备快捷键
Visual Studio 快捷键是提升 .NET 开发效率的核心工程能力,其本质是通过键盘操作替代鼠标交互,实现确定性响应与低延迟反馈。基于 Roslyn 编译器服务和语言平台深度集成,这些热键覆盖编辑、导航、调试、重构与测试五大高频动作域,具备符号级跳转、智能格式化、安全重构等技术价值。在金融系统、医疗影像、工业控制等严苛企业级场景中,熟练运用可将单次操作耗时压缩至 0.8 秒内,显著降低上下文切换成本与协作熵值。本文聚焦经 13 年实操验证的 27 个不可替代核心快捷键,兼顾 junior 开发者快速
工作中使用到的单词(软件开发)
1.エイリアス alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート promote 促进,提升 开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................
Mythos安全模型:AI驱动的自动化漏洞挖掘与红队能力工程化
AI安全模型正从代码补丁生成工具,演进为具备纵深推理、跨语言语义对齐和动态行为模拟能力的自动化漏洞挖掘系统。其核心原理在于融合符号执行、终端交互建模与真实攻击链规划,突破传统SAST/DAST在逻辑漏洞识别、多层技术栈穿透和业务上下文理解上的局限。技术价值体现在将渗透测试从人工密集型任务转化为可重复、可审计、可集成CI/CD的安全流水线环节,显著降低高危漏洞响应延迟与人力成本。典型应用场景覆盖金融核心系统、医疗HIS、工业PLC等遗留系统安全加固,以及开源项目AI原生安全协作。Mythos代表了AI安全从‘
CnOpenData A股上市公司招聘数据
就业是经济的“晴雨表”,更是社会的“稳定器”。稳定和扩大就业一直是国家宏观调控的重要目标,2021年中央经济工作会议八次提到“就业”这一关键词。在新冠肺炎疫情蔓延、世界经济下行及人口老龄化加快等多重因素的叠加之下,稳就业保民生成为我国当前及今后一段时间内的工作重点。招聘最直接的目的就是弥补企业人力资源的不足,这是招聘工作的前提。
Visual Basic .Net中实现HTTP协议
HTTP是Hypertext Transfer Protocol的简称,即:超文本传输协议。在TCP/IP协议簇中的一百多个协议中,HTTP协议可以说是平常接触最多的一种协议了。因为日常浏览网页时所使用的浏览器浏览,其基本的协议类型就是HTTP协议。HTTP协议是一个客户端/服务器协议,这里所说的服务器端是指提供WWW服务的主机,即各类Web站点等。而客户端是指运行各类浏览器(如IE、Netsca
6788



被折叠的 条评论
为什么被折叠?



