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 ...
随机推荐
- ASP.NET 5 Target framework dnx451 and dnxcore50
中文不知如何定义标题,所以干脆就直接贴出关键字,在 ASP.NET 5 项目的 project.json 配置文件中,会有这样的定义: "frameworks": { " ...
- Storm介绍及与Spark Streaming对比
Storm介绍 Storm是由Twitter开源的分布式.高容错的实时处理系统,它的出现令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求.Storm常用于在实时分析.在线机器学 ...
- 跨域之同源策略 Same-origin policy
同源策略是浏览器中最基本的隔离潜在恶意文件的安全策略,他限制了来自不同源(origin)的文档或脚本之间的相互作用. 何谓同源 在跨域之URL中介绍过一个URL的标准格式如下: 协议类型://服务器地 ...
- Android GradientDrawable(shape标签定义) 静态使用和动态使用(圆角,渐变实现)
Android GradientDrawable使用优势: 1. 快速实现一些基本图形(线,矩形,圆,椭圆,圆环) 2. 快速实现一些圆角,渐变,阴影等效果 3. 代替图片设置为View的背景 4. ...
- Rafy 框架 - 大批量导入实体
某些场景下,开发者希望能够大批量地把实体的数据导入到数据库中.虽然使用实体仓库保存实体列表非常方便,但是其内部实现机制是一条一条的保存到数据库,当实体的个数较多时,效率就会很低.所以 Rafy 设计了 ...
- sql 分组取最新的数据sqlserver巧用row_number和partition by分组取top数据
SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...
- helios架构详解(一)服务器端架构
看了“菜鸟耕地”的”.NET开源高性能Socket通信中间件Helios介绍及演示“,觉得这个东西不错.但是由于没有网络编程知识,所以高性能部分我就讲不出来了,主要是想根据开源代码跟大家分享下Heli ...
- C#开发微信门户及应用(4)--关注用户列表及详细信息管理
在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继续写这个系列的博客了,并不是对这个方面停止了研究,而是继续深入探索这方面的技术,为了更好的应用起 ...
- PHP 原型模式
原型模式:原型模式是先创建好一个原型对象,然后通过拷贝原型对象来创建新的对象.适用于大对象的创建,因为创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可.也可以用作动态 ...
- linux使用wkhtmltopdf报错error while loading shared libraries:
官网提示 linux需要这些动态库.depends on: zlib, fontconfig, freetype, X11 libs (libX11, libXext, libXrender) 在li ...