package com.gloomyfish.socket.tutorial.one;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
public class HomePageVisitor {
private Socket client;
private SocketAddress address;
public HomePageVisitor(String hostName, int port) throws UnknownHostException, IOException {
client = new Socket();
address = new InetSocketAddress(hostName, port);
}
// GET http://localhost:8080/blank/Welcome.do HTTP/1.1\r\n
public void printHomePageInfo(String httpString)
{
try {
// Get local host info
InetAddress inetAddress = InetAddress.getLocalHost();
System.out.println("Host Address = " + inetAddress.getHostAddress());
System.out.println("Hostname = " + inetAddress.getHostName());
// visit the WEBSITE
client.connect(address);
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(), "UTF8"));
bufferedWriter.write(httpString);
// -- HTTP/1.1 400 Bad Request if not send \r\n
bufferedWriter.write("\r\n");
bufferedWriter.flush();
System.out.println("http request send out");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
String content = null;
while((content = bufferedReader.readLine()) != null) {
if(getStatusCde(content) == 400) {
System.err.println("HTTP/1.1 | HTTP/1.0 400 Bad Request");
break;
}
System.out.println("response contect -->> " + content);
}
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* <p> try to parse the HTTP response content</p>
* @param content
* @return status of HTTP
*/
private static int getStatusCde(String content) {
int status = 200; // default OK response
if(content == null || "".equals(content))
return status;
else if (!content.contains("HTTP/1.1")&& !content.contains("HTTP/1.0"))
return status;
else if(content.contains("400") && content.contains("HTTP/1.1")
|| content.contains("HTTP/1.0")) {
status = 400;
}
return status;
}
public static void main(String[] args) {
try {
HomePageVisitor httpVisitor = new HomePageVisitor("www.csdn.net", 80);
httpVisitor.printHomePageInfo("GET http://www.csdn.net HTTP/1.0\r\n");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
- **Socket编程**:介绍如何使用Go语言进行网络编程,特别是TCP/IP协议的Socket编程。 - **WebSocket**:讲解WebSocket协议及其在Go语言中的实现方法,用于实现实时双向通信。 - **REST**:探讨RESTful架构的设计...
### JAVA网络编程从入门到精通知识点详解 #### 一、Internet地址概述 互联网中的每一台设备都需要有一个唯一的标识符——IP地址。当前广泛使用的IPv4地址由四个字节组成,而未来的趋势是采用16个字节的IPv6地址。 ...
- **Socket编程**:用于实现网络通信的基本技术。 - **HTTP协议**:用于构建Web应用的基础协议。 #### 16. Servlet 技术 - **Servlet介绍**:Servlet是Java EE技术的一部分,用于构建动态Web应用。 - **生命周期**...
- **Socket编程**: 客户端-服务器通信的基础。 - **HTTP协议**: 构建Web服务的关键协议。 - **URL与URLConnection**: 访问网络资源。 #### 十二、Servlet技术 - **概念**: 用于扩展服务器功能的小程序。 - **生命...
Java Socket是Java提供的用于网络编程的基本接口,它允许两个网络应用程序之间建立连接并交换数据。Socket基于TCP/IP协议,确保了数据的可靠传输。在Java中,`java.net.Socket`类和`java.net.ServerSocket`类是实现...
这款服务器能够帮助用户在指定的IP地址和端口上快速部署并运行一个小型的Web站点,为学习和测试提供便利。它的核心功能是处理HTTP请求并返回响应,支持基本的静态资源服务,如HTML、CSS和JavaScript文件的访问。 ...
数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧...
Flink 使用 Scala 编程语言,所以还需要 Scala 的支持,这里的版本是 2.12。 2. **下载与解压**:从 Apache 官方网站或者镜像站点下载 flink-1.15.2-bin-scala_2.12.tgz 文件。下载完成后,使用解压工具将其解压到...
Eclipse支持插件开发,其中MyEclipse是针对企业级Java开发的商业插件,提供更多的Web和Java EE开发工具。 **FTP服务器软件Serv-U** Serv-U是一款常用的FTP服务器软件,支持Windows操作系统。安装并配置Serv-U后,...
在同一台IIS服务器上,可以通过不同的IP地址、端口号或者主机名来区分和运行多个Web站点。每个站点通过套接字(Socket)的IP地址和端口号唯一标识,从而实现服务器资源的隔离和分配。 Apache与Tomcat的关系密切,...
Java版精华区 含java jsp及js等精华帖子合集 适合收藏 查询 <br>序号 精华区主题 -------------------------------- 1. [目录]Java教程 1. [目录]Java语言教程 2. [目录]来自java的传说...
总结来说,本文探讨了如何构建一个基于广度优先算法的多线程网络爬虫,通过Java实现,涉及了网络协议、SOCKET编程、数据存储和网页解析等多个关键环节。这样的爬虫可以高效地抓取特定站点的URL并存储,解析后的网页...
9. **网络通信**:Java的Socket编程允许创建网络客户端和服务端,实现数据的网络传输。 在学习Java的过程中,重要的是理解并掌握Java开发环境的安装和配置。例如,要开始编写Java程序,首先需要从官方站点下载JDK,...
这可能涉及到数据库查询,例如,从公交线路表、站点表、时刻表中获取信息。Java的JDBC(Java Database Connectivity)接口用于连接和操作数据库,如MySQL或Oracle。 3. **业务逻辑模块**:这一部分包含公交运营的...
数据通过无线网络传输到服务器,使用Java的Socket编程进行数据通信。然后,系统会使用Java的多线程和并发处理这些海量数据,确保高效稳定的运行。 三、数据分析与决策 在获取到数据后,系统会利用数据挖掘和机器...
8. **网络编程**:如果系统涉及网络通信,如获取实时公交位置,就需要了解Socket编程或HTTP协议,以及相关的API调用。 9. **地理信息系统(GIS)**:公交系统可能会涉及到地理位置信息,开发者可能需要了解如何使用...
第11章 函数和函数式编程 11.1 什么是函数? 11.1.1 函数vs过程 11.1.2 返回值与函数类型 11.2 调用函数 11.2.1 函数操作符 11.2.2 关键字参数 11.2.3 默认参数 11.2.4 ...