笔试题14:用TCP通信模型创建一个Web服务器(源码)

2023-10-30

     我们都知道,IIS、Apache和tomcat等Web服务器可以用来创建Web站点,负责接受客户端浏览器的HTTP请求。那么,他们是如何实现的呢?其实基本原理是采用TCP通信模型。下面给出一个采用Java的TCP编程API创建的简易Web服务器的例子。

闲话少说,附上源码:

import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;


public class WebService {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		//用端口号创建一个ServerSocket对象,监听Web的端口80
		ServerSocket ss = new ServerSocket(80);
		//开始循环监听来自客户端的请求
		Socket s = null;
		while((s = ss.accept()) != null){
			new HTTPThread(s).start();//开始一个新的线程
		}
		ss.close();
	}
}
//线程类,HTTP处理线程
class HTTPThread extends Thread{
	private Socket socket;//连接点
	public HTTPThread(Socket socket){//构造方法
		super();
		this.socket = socket;
	}
	//线程方法
	public void run(){
		try {
			OutputStream os = socket.getOutputStream();//获得输出流
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笔试题14:用TCP通信模型创建一个Web服务器(源码) 的相关文章

  • 如何配置 FOSRestBundle 以不干扰自定义异常控制器

    我刚刚将我的 Symfony 2 7 页面更新到 2 8 除了 Symfony 本身之外 许多其他软件包也已更新 FOSRestBundle已从1 4版本更新至2 1版本 更新后CustomExceptionController我配置为Tw
  • 使用 LINQ 分割字符串

    我想按我的结果和字符串行中的匹配数进行排序 所以这是代码 ThenByDescending p gt p Title ToLower Split Count w gt words Any w Contains 但它给我带来错误并说 LINQ
  • 我在 android 上使用 java 时遇到异常 (java.lang.NoClassDefFoundError),为什么?

    这是我运行的线路 AudioInputStream clip1 AudioSystem getAudioInputStream new File wavFile1 这是我得到的异常 来自 LogCat 错误 AndroidRuntime 3
  • 为什么 exceptT 没有 MonadMask 实例?

    爱德华 克梅特例外情况图书馆不提供单子掩码 https www stackage org haddock lts 7 18 exceptions 0 8 3 Control Monad Catch html t MonadMask实例为Ex
  • 分层架构中的异常处理

    我们正在分层设计中重构 当然还有重新设计 我们的服务 我们有服务操作层 BLL 网络抽象层 gt 处理网络代理 数据抽象层 但我们对我们的异常处理策略有点困惑 我们不想向外界透露太多 BLL 的信息 从其他层到bll就可以了 我们不想让 t
  • 抛出并保留堆栈跟踪不符合代码分析所描述的预期

    进行代码分析给了我项目 CA2200 CA2200 重新抛出以保留堆栈详细信息 func 重新抛出捕获的异常并将其显式指定为参数 请改用不带参数的 throw 以保留最初引发异常的堆栈位置 我已经实现了该建议 但无论如何我似乎都得到了相同的
  • 未捕获 Func<> 的异常(异步)

    我有以下代码 为了进行此重现而进行了简化 显然 catch 异常块将包含更多逻辑 我有以下代码 void Main var result ExecuteAction async gt Will contain real async code
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • JavaFX 抛出 ArrayIndexOutOfBoundsException

    我正在尝试使用 JavaFX 标签和组 通过鼠标拖动将它们移动到屏幕上 新节点从某些线程添加到动画组中 然而 有时我会突然看到以下异常 我假设 当某些节点重叠时 但我不知道问题是什么 因为我的代码不涉及 有谁知道这个异常和根本原因 使用JD
  • WCF MaxReceivedMessageSize 属性未采用

    搜索了一下 没有运气 我不断得到 已超出传入消息的最大消息大小配额 65536 要增加配额 请使用相应绑定元素上的 MaxReceivedMessageSize 属性 这是有道理的 所以我进入服务器和客户端配置并进行更改 Client
  • 函数不会抛出 bad_alloc 异常

    我正在尝试根据 Stroustrup 的 C PL4 书做一个练习 任务是 使用分配这么多内存new that bad alloc被抛出 报告如何 分配了多少内存以及花费了多少时间 执行此操作两次 一次不写入分配的内存 一次写入每个 元素
  • UnknownHostException:名称或服务未知

    我正在尝试使用 com squareup okhttp 中的 OkHttpClient 从 API 返回一些数据 我遇到了一些错误 我最终能够克服这些错误 但我无法克服这个主机异常错误 并且这里似乎没有任何内容足够具体到我的情况能够解决 下
  • 向下投射通用元素类型

    public class ConfigControlBase
  • 有没有比 ` except: pass` 更简洁的替代方案?

    我有一个函数 可以按偏好顺序返回多个组的随机成员 事情是这样的 def get random foo or bar I d rather have a foo than a bar if there are foos return get
  • Eiffel 中的错误处理示例

    我在 Eiffel 中找不到任何实际的错误处理示例 我只找到一些例子 要么是微不足道的 要么完全忽略错误 要么将错误处理留给读者 我有兴趣了解在没有异常的情况下错误如何通过调用堆栈 例如 我想知道发送网络请求的应用程序如何通知用户在调用链中
  • try-catch 块是否会降低性能[重复]

    这个问题在这里已经有答案了 This link http www cplusplus com doc tutorial exceptions states 为了捕获异常 我们必须将一部分代码放在异常下 检查 这是通过将这部分代码包含在 tr
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • 如何记录函数可能抛出的所有异常?

    如果您有一个可能引发异常的公共函数 该函数使用其他 私有或公共 辅助函数也可能引发异常 我认为您应该记录公共函数可以引发哪些异常这包括辅助函数抛出的异常 像这样 使用 Doxygen throw Exception throw Except
  • 为什么“扔”和“扔前”在这种情况下有相同的行为?

    我惊呆了 我一直以为throw单独在 catch 块中会抛出手头的异常而不改变堆栈跟踪 但是throw ex在 catch 块中将更改堆栈跟踪以显示源自语句位置的异常 采取以下两个代码块 我希望输出会略有不同 因为使用throw和其他用途t
  • 为什么 Perl 6 的 try 不处理 shell() 中的非零退出?

    This try https docs raku org language exceptions index entry try blocks try捕获异常 try die X AdHoc say Got to the end 输出显示程

随机推荐

  • springBoot输出日志到指定目录

    以输出日志文件到D data log为例 版本一 一 在application properties加上如下配置 logging path D data log logging config classpath logback spring
  • Vue自定义指令

    目录 1 自定义指令注册 1 1 全局注册 1 2 局部注册 2 自定义指令写法 2 1 对象式 常用 2 2 函数式 3 总结 1 自定义指令注册 1 1 全局注册 Vue directive name 1 2 局部注册 directiv
  • 计算机怎么更改桌面图标大小,win7系统桌面图标怎么设置大小 win7电脑桌面图标大小更改方法...

    win7系统在使用的时候不知道大家有没有遇上这样的问题 就是桌面图标的大小不符合我们的审美 那么遇上这种情况要怎么解决呢 下面小编就跟大家说说处理的方法 具体的解决方法 这种方法是最快捷的方法 我们可以在电脑桌面上 按住Ctrl键不放 然后
  • Qt 子线程中使用UI线程

    方案起源 最近做了一个Excel保存图表的项目 因为不能直接用Excel的图表 会直接暴露计算数据 所以采用的是QCharts生成的表格 但是QCharts的问题是 调用QChartView setChart接口之后 会出现不在同一个线程的
  • 模拟电路设计(5)--- J-FET的特性曲线

    上篇我们分析了J FET的结构和工作原理 今天我们来说说J FET的输出 转移特性曲线 J FET的输出特性曲线 由图中可以看出 J FET的输出特性曲线分为四个区域 可变电阻区 线性放大区 截止区和击穿区 下面分别来说说 1 截止区 在N
  • Vue第10天笔记:Vue动画(了解)、yarn命令的安装、webpack:介绍、基本步骤使用、npm中 --save和 --save-dev的区别、scripts的使用、配置到文件中、自动生成插件

    前一天复习 1 自定义指令 1 定义使用 Vue directive 指令名 指令的配置对象 2 五个钩子函数 bind inserted update 3 钩子函数的参数 el 指令所在的元素 binding 指令相关的信息对象 1 na
  • 【数模】奇异值分解SVD和图形处理

    介绍奇异值分解在图形压缩中的运用 并将简单介绍下Matlab对于图形和视频的处理 一 奇异值分解介绍 1 1 基本概念 奇异值分解 Singular Value Decomposition 以下简称SVD 是线性代数中一种重要的矩阵分解 U
  • C++ STL三大常用容器

    看到一篇文章觉得对不熟悉STL容器特性和使用选择的人来说很友好 就收藏和学习下 https blog csdn net qq 44943840 article details 121990808 C 中的容器可以分为好多种 常见的有顺序容器
  • 计算机网络(一)----概述

    概述 功能 组成 分类 性能指标 一 计算机网络的概述 1 网络的概念网络是由若干结点和链路组成 结点可以是计算机 集线器 交换机 路由器等 链路可以是有线链路或无线链路 如电信网络 电话 电报 传真服务 有限电视网络 观看电视节目 计算机
  • C++矩阵运算类(Matrix.h)

    这个类数据类型是double 包含了常用的矩阵计算 多数方法经过实践验证 也难免有不足之处 如有发现欢迎指出 https github com ims0 comTutor tree master matrix include
  • 晶振的负载电容与外接电容的区别与关系

    经常遇到有人把晶振的负载电容与外接电容混淆 甚至还有人误以为这是指同样的参数 这里需要特别指出的是 若你这样想 就大错特错了 下面就为您进行分析与区分 负载电容指的是晶振的一个内部重要电气参数 一般情况下 对功耗不太敏感的电子设备PCBA上
  • Stable Diffusion模型阅读笔记

    Stable Diffusion模型 什么是Stable Diffusion模型 一般而言 扩散是在图像中反复添加小且随机的噪声 与之相反 Stable Diffusion模型是一种将噪声生成为图像的机器学习模型 经过训练 它可逐步对随机高
  • leetcode 链表相交

    面试题 02 07 链表相交 力扣 LeetCode leetcode cn com 在看别人的题解之前我有过两个思路 1 最容易想到的就是对链表A中的每个元素都在B中查找 如果找到了就是相交点 显然这种方法的时间复杂度比较高 leetco
  • 闲鱼新手如何快速卖货 咸鱼赚钱排名优化技巧

    闲鱼现在很多人都有了解 对于高价值自己没用的二手物品 甚至全新物品在这个平台出售 闲鱼 对于大多数人来说只是一个卖二手和买二手的app 哪里有人 哪里就有流量 哪里有流量 哪里就存在引流的空间 小满老师介绍以下八个方法 供大家学习 teac
  • Spring三种bean注入方式

    Spring中依赖注入有三种注入方式 一 构造器注入 二 设值注入 setter方式注入 三 Feild方式注入 注解方式注入 一 构造器注入 构造器注入顾名思义就是在程序组件中实现构造器 构造器可以是一个也可以是多个 废话不多说 直接上代
  • flex 子元素占满剩余高度 与 flex:1 的子元素 overflow:hidden 失效

    这几天使用flex开发大屏 遇到一个印象比较深的问题就是flex的子元素 在其他兄弟元素的高度不定的情况下 如何占满父元素的剩余空间 效果图 要点就是 1 父元素要设置 display flex 2 父元素的主轴方向设置为从上到下 flex
  • Dockerfile 中 ENTRYPOINT 的使用

    先占个坑 以免忘记 有空了来填
  • 2、Java基础-NIO、IO、ThreadLocal类

    1 IO和NIO 1 1 传统IO和NIO区别在哪 Java NIO和IO之间最大的区别在 IO是面向流的 而NIO是面向缓存区buffer的 Java NIO是非阻塞式的 意味着使用一个线程向某通道发送一个请求读取数据 如果buffer中
  • Squid日志分析与访问控制详解

    squid日志分析与访问控制 squid的日志系统能够帮助我们查看访问者的记录 包括来访者Internet的站点信息 时间占用信息 排名 连接次数和访问量 是一个很完善的日志系统 squid常用日志分为如下两个 分别是access log
  • 笔试题14:用TCP通信模型创建一个Web服务器(源码)

    我们都知道 IIS Apache和tomcat等Web服务器可以用来创建Web站点 负责接受客户端浏览器的HTTP请求 那么 他们是如何实现的呢 其实基本原理是采用TCP通信模型 下面给出一个采用Java的TCP编程API创建的简易Web服