尽管http协议很简单,但要想设计一下HTTP服务器程序,还必须进行多方面的处理,特别是,如果想完全实现www服务器功能,就需要充分考虑程序的错误恢复和安全对策,这样一来,设计出来的HTTP服务器程序就很复杂,然而,如果要设计一个能对客户端的请求作固定回答的程序则很容易,见下面的程序:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class socketTest {
public static void main(String[] args){
ServerSocket serverSocket;
Socket socket;
BufferedReader netBis;
BufferedOutputStream netBos;
BufferedInputStream localBis;
byte localB[] = new byte[1024];
int count;
try {
serverSocket = new ServerSocket(8888,30);//8888是指定监听的端口
socket = new Socket();
while(true){
System.out.println("机主开启socket通信,等待用户的到来连接!");
socket = serverSocket.accept();
System.out.println("有访问者:" + socket.getRemoteSocketAddress());
netBis = new BufferedReader(new InputStreamReader(socket.getInputStream()));
netBos = new BufferedOutputStream(socket.getOutputStream());
try {
//加载本地文件来响应用户的请求
localBis = new BufferedInputStream(new FileInputStream(new File("src/baidu.htm")));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
return ;
}
/*//下面对客户端的请求不能用如下的方式,这样会在这里进入等待状态,而不会往下执行,就等待着客户的数据
while((temp = netBis.readLine()) != null){
System.out.println(temp);
}*/
//客户端发送http请求时,每输入一行要用换行符表示结点,而整个请求输入完毕时也要用换行符来表示,因此,对于服务器来说,至少接收到2个换行符。
//下面我们可以将i的值设置大一点看看用户提交的请求信息,若用浏览器提交请求,那么这里会打印出http的一般请求信息头,这里的i值一旦大于客户端提交的信息行数据时,就会一直在等待。
for(int i = 0 ; i < 2 ; i++)
System.out.println(netBis.readLine());
String temp;
//简单的响应客户端的请求
while( (count = localBis.read(localB)) != -1 ){
netBos.write(localB, 0, count);
}
netBos.flush();//一定在用flush一下,不然不会传到客户端的,就算下面用了close也不没有将它从缓存里清出去的。
netBis.close();
netBos.close();
localBis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行上面的程序,然后可以用浏览器来访问它了,在浏览器里输入http://localhost:8888就可以请求到我们放在scr下面的文件信息,这里是百度主页。或者可以通过主机名来进行访问,如我计算机名叫abcd,那可以http://abcd:8888来访问。这个就是简单的http服务器啦,呵呵。
分享到:
相关推荐
在本文中,我们将深入探讨Socket模拟服务器的相关知识点,以及如何实现网络通讯数据的接收和处理。 首先,Socket是一种网络通信协议接口,它允许应用程序通过网络进行双向通信。在Java中,Socket类和ServerSocket类...
2. **TCP服务器**:模拟服务器端,等待客户端连接,接收客户端发送的数据并做出响应。通过此功能,开发者可以检查服务器端代码是否正确监听端口,接收连接,以及处理接收到的数据。 3. **UDP客户端**:发送UDP数据...
详细的Socket网络通信,结合线程,委托等知识模拟服务器开发
在Android平台上,我们可以利用Socket编程来模拟一个简单的HTTP服务器,以提供本地文件系统中的资源,如HTML文件,供外部设备(如浏览器)访问。这个过程涉及到Android系统的网络权限管理、Socket编程以及HTTP协议的...
TCP调试助手是一款强大的工具,主要用于帮助开发者在设计和测试网络应用程序时模拟Socket服务器和客户端的行为。这个工具的核心功能是提供一个友好的界面,使得开发者无需编写额外的代码就能直观地理解TCP连接的工作...
`说明.txt`文件提供了更详细的使用指南,可能包括如何修改服务器返回的数据值,如何启动和关闭模拟的Socket服务器等步骤。 通过这个项目,开发者可以学习到如何利用C#创建Socket服务器,处理TCP连接,以及如何在...
3. 模拟 HTTP 服务器:使用 Java Socket 可以模拟简单的 HTTP 服务器,来处理客户端的请求和响应。服务器可以监听客户端的请求,解析请求头,返回响应体。 4. HTTP 请求头解析:HTTP 请求头包含了请求的方法、URL、...
- 在本项目中,使用C语言的socket API创建服务器(SlideWindowReceiver.c)和客户端(SlideWindowSender.c),分别模拟接收方和发送方。 4. **实现细节**: - 发送方(SlideWindowSender.c):初始化socket,建立...
1. 创建服务器套接字:使用socket()函数创建一个Socket对象,并指定协议族(通常是AF_INET,表示IPv4)和套接字类型(如SOCK_STREAM,对应TCP)。 2. 绑定IP和端口:用bind()函数将服务器套接字与一个IP地址和端口号...
6. **线程与并发**:对于多线程或并发连接的处理,SocketTool 可以创建多个模拟服务器线程,以测试客户端的并发处理能力。 7. **日志记录**:工具通常提供日志功能,记录每一次通信的细节,方便分析和调试。 在...
【标题】:Socket实现的静态网页HTTP服务器 在计算机网络编程中,Socket是网络通信的基础接口,它允许程序创建和管理网络连接。本项目利用C++语言,通过Visual Studio 2010开发环境,实现了基于TCP协议的静态网页...
本文将深入探讨如何使用Socket来模拟HTTP协议头,以便与Web服务器进行交互并接收响应信息。 HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,它定义了客户端(如浏览器)与服务器之间的通信格式。而...
C# Socket 与服务器Socket交互 客户端
在我们的"JAVA socket 模拟聊天室"项目中,服务器端需要使用`ServerSocket`监听特定端口,等待客户端的连接请求。一旦客户端使用`Socket`发起连接,服务器端的`accept()`方法将阻塞直到连接建立。连接建立后,双方就...
2. 发送特定的命令或数据到服务器,模拟Socket客户端的行为。 3. 接收服务器的响应,并根据响应执行后续命令。 4. 关闭Socket连接。 在批处理文件中,可以利用`type`命令读取文本文件内容并发送到Socket,用`echo`...
本主题聚焦于“socket http/https 模拟登录 请求页面”,这些概念都是网络编程中的核心元素。以下是对这些概念的详细解释: **Socket**: Socket是网络通信的基本构建块,它提供了一个低级别的接口,允许程序通过...
java Socket模拟客户端和服务器通信,简易窗体实现,代码简易,方便学习使用。服务器和客户端的代码放在一起了,中间有空行标注,记得分开。
通常,这样的测试会模拟服务器端的行为,接收来自客户端的图像数据,并检查其完整性。 总之,"摄像头通过socket发送图像到服务器"涉及Android的摄像头API、网络编程、图像处理和错误处理等多个技术领域。通过理解并...
在本文中,我们将深入探讨如何使用开源的SuperSocket库实现路灯模拟通信系统。SuperSocket是一个轻量级、高性能的.NET套接字应用框架,它简化了网络编程的复杂性,使得开发者可以专注于业务逻辑,而无需关注底层网络...