java socket收发http协议内容
import
java.io.BufferedReader;
import
java.io.BufferedWriter;
import
java.io.InputStreamReader;
import
java.io.OutputStreamWriter;
import
java.net.ConnectException;
import
java.net.InetAddress;
import
java.net.InetSocketAddress;
import
java.net.ServerSocket;
import
java.net.Socket;
import
java.net.SocketAddress;
import
java.net.SocketException;
import
java.net.SocketTimeoutException;
/**
* 用socket来收发http协议报文
* @author luoguansong lgsstart89@163.com
*/
public
class
SocketHttp {
public
static
void
main(String[] args) {
Thread threadReceive=
new
Thread(
new
TestReceiveHttp());
threadReceive.start();
// Thread threadSend=new Thread(new TestSendHttp());
// threadSend.start();
}
}
class
TestSendHttp
implements
Runnable{
@Override
public
void
run() {
try
{
String path =
"/"
;
String host =
"www.oschina.net"
;
int
port =
80
;
Socket socket =
new
Socket();
InetSocketAddress address=
new
InetSocketAddress(host, port);
socket.connect(address,
3000
);
OutputStreamWriter osw =
new
OutputStreamWriter(socket.getOutputStream(),
"utf-8"
);
osw.write(
"GET "
+ path +
" HTTP/1.1\r\n"
);
osw.write(
"Host: "
+ host +
" \r\n"
);
//http协议必须在报文头后面再加一个换行,通知服务器发送完成,不然服务器会一直等待
osw.write(
"\r\n"
);
osw.flush();
socket.shutdownOutput();
BufferedReader bufferedReader =
new
BufferedReader(
new
InputStreamReader(socket.getInputStream(),
"utf-8"
));
String line =
null
;
while
((line = bufferedReader.readLine()) !=
null
) {
System.out.println(line);
}
osw.close();
bufferedReader.close();
socket.close();
}
catch
(ConnectException e) {
System.out.println(
"连接失败"
);
}
catch
(SocketTimeoutException e) {
System.out.println(
"连接超时"
);
}
catch
(Exception e) {
System.out.println(e.getMessage());
}
}
}
class
TestReceiveHttp
implements
Runnable{
@Override
public
void
run() {
ServerSocket server;
Socket socket;
try
{
server=
new
ServerSocket(
8079
);
System.out.println(
"正在等待8079端口的请求"
);
while
(
true
){
socket=server.accept();
if
(socket!=
null
){
new
Thread(
new
TestReveiveThread(socket)).start();
}
}
}
catch
(Exception e) {
System.out.println(
"异常"
);
}
}
}
class
TestReveiveThread
implements
Runnable{
Socket socket;
public
TestReveiveThread(Socket s) {
socket=s;
}
public
void
run() {
try
{
BufferedReader bufferedReader =
new
BufferedReader(
new
InputStreamReader(socket.getInputStream(),
"utf-8"
));
OutputStreamWriter osw =
new
OutputStreamWriter(socket.getOutputStream(),
"utf-8"
);
String line=
null
;
while
((line=bufferedReader.readLine())!=
null
){
System.out.println(line);
if
(line.equals(
""
)){
break
;
}
}
//模拟http请求到网站,然后把内容转发给当前的http请求
// String path = "/";
// String host = "www.oschina.net";
// int port = 80;
// Socket socket2 = new Socket(host, port);
// OutputStreamWriter osw2 = new OutputStreamWriter(socket2.getOutputStream(),"utf-8");
// osw2.write("GET " + path + " HTTP/1.1\r\n");
// osw2.write("Host: " + host + " \r\n");
// osw2.write("\r\n");
// osw2.flush();
// BufferedReader bufferedReader2 = new BufferedReader(new InputStreamReader(socket2.getInputStream(), "utf-8"));
// String line2 = null;
// while ((line2 = bufferedReader2.readLine()) != null) {
// osw.write(line2+"\r\n");
// }
// bufferedReader2.close();
// osw2.close();
// socket2.close();
osw.write(
"HTTP/1.1 200 OK\r\n"
);
osw.write(
"Server: Apache-Coyote/1.1\r\n"
);
osw.write(
"Set-Cookie: JSESSIONID=03493794995CE31A0F131787B6C6CBB2; Path=/; HttpOnly\r\n"
);
osw.write(
"Content-Type: text/html;charset=UTF-8\r\n"
);
osw.write(
"Transfer-Encoding: chunked\r\n"
);
osw.write(
"Date: Tue, 19 May 2015 02:48:27 GMT\r\n"
);
osw.write(
"\r\n"
);
osw.write(
"c9\r\n"
);
osw.write(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n"
);
osw.write(
"<HTML>\r\n"
);
osw.write(
" <HEAD><TITLE>A Servlet</TITLE></HEAD>\r\n"
);
osw.write(
" <BODY>\r\n"
);
osw.write(
" This is class com.serv.myServ, using the GET method\r\n"
);
osw.write(
" </BODY>\r\n"
);
osw.write(
"</HTML>\r\n"
);
osw.write(
"\r\n"
);
osw.write(
"0"
);
osw.write(
"\r\n"
);
osw.write(
"\r\n"
);
osw.flush();
bufferedReader.close();
osw.close();
socket.close();
}
catch
(Exception e) {
System.out.println(
"客户端接受异常"
+e.getMessage());
}
}
}
java socket收发http协议内容的更多相关文章
- 移动开发首页业界资讯移动应用平台技术专题 输入您要搜索的内容 基于Java Socket的自定义协议,实现Android与服务器的长连接(二)
在阅读本文前需要对socket以及自定义协议有一个基本的了解,可以先查看上一篇文章<基于Java Socket的自定义协议,实现Android与服务器的长连接(一)>学习相关的基础知识点. ...
- JAVA Socket 编程学习笔记(二)
在上一篇中,使用了 java Socket+Tcp/IP 协议来实现应用程序或客户端--服务器间的实时双向通信,本篇中,将使用 UDP 协议来实现 Socket 的通信. 1. 关于UDP UDP协 ...
- java 网络编程 TCP协议 java 服务器和客户端 java socket编程
一个 HelloWord 级别的 Java Socket 通信的例子.通讯过程: 先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求.然后运行 Client 端,客 ...
- 使用java语言基于SMTP协议手写邮件客户端
使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...
- Java Socket编程
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求 哇,一看标题怎么这么长啊,其实意思很简单,哥讨厌用HTTP Client做POST与GET提交 觉得那个毕竟是别人写 ...
- java web基础2HTTP协议知识点总结
一.HTTP协议基础 1.定义:HTTP是基于TCP连接的浏览器与服务器通信协议.(即传输层先用TCP三次握手建立连接,进而HTTP通信) 2.连接原理:先进行TCP建立端到端连接,然后发送和接受HT ...
- Java Socket编程----通信是这样炼成的
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- 如何为可扩展系统进行Java Socket编程
从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...
随机推荐
- Node学习笔记(三):基于socket.io web版你画我猜(二)
上一篇基础实现的功能是客户端canvas作图,导出dataURL从而实现图片信息推送,下面具体讲下服务端的配置及客户端的配置同步 首先先画一个流程图,讲下大概思路 <canvas id=&quo ...
- openresty 前端开发序
还记得第一次尝试前后端分离的时候,是使用nginx + react 构建的spa应用,后端是java,主要处理业务逻辑逻辑部分,返回json数据,在nginx里面配置好html + js纯静态文件,再 ...
- 搜狗输入法linux安装 以及 12个依赖包下载链接分享
搜狗输入法linux安装版,先安装各种依赖包,大概12个依赖,可能中途还需要其他依赖,可以效仿解决依赖问题.如图这12个文件要是手动点击下载,那也太笨点了,我们要用shell命令批量下载.命令如下:w ...
- Atitit.ide技术原理与实践attilax总结
Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...
- CentOS6.8 修改主机名(1)
1.临时修改主机名 显示主机名:spark@master:~$ hostnamemaster修改主机名:spark@master:~$ sudo hostname hadoopspark@mast ...
- jdk顺序表笔记
一.AbstractCollection 提供了集合的最大实现 继承该类,必须实现size()和iterator(),因为该类操作集合都是通过iterator 二.fail-fast策略 该策略在集合 ...
- javascript冒泡排序
数组冒泡排序算法(升序) 升序:小数在前,大数在后 冒泡排序的原则:每次比较相邻两个元素,如果前一个数>后一个数,说明违反升序的要求,就将两数交换位置.否则,保持不变.继续比较下一对. 例如:玩 ...
- android清除本应用里的各种数据的方法
public class DataCleanManager { /** * * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * * * @param conte ...
- 【代码笔记】iOS-UILable电子表显示
一,效果图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...
- MS SQL巡检系列——检查重复索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...