来自:https://www.oschina.net/code/snippet_2009881_48232
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协议内容的更多相关文章

  1. 移动开发首页业界资讯移动应用平台技术专题 输入您要搜索的内容 基于Java Socket的自定义协议,实现Android与服务器的长连接(二)

    在阅读本文前需要对socket以及自定义协议有一个基本的了解,可以先查看上一篇文章<基于Java Socket的自定义协议,实现Android与服务器的长连接(一)>学习相关的基础知识点. ...

  2. JAVA Socket 编程学习笔记(二)

    在上一篇中,使用了 java Socket+Tcp/IP  协议来实现应用程序或客户端--服务器间的实时双向通信,本篇中,将使用 UDP 协议来实现 Socket 的通信. 1. 关于UDP UDP协 ...

  3. java 网络编程 TCP协议 java 服务器和客户端 java socket编程

    一个 HelloWord 级别的 Java Socket 通信的例子.通讯过程:        先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求.然后运行 Client 端,客 ...

  4. 使用java语言基于SMTP协议手写邮件客户端

    使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...

  5. Java Socket编程

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  6. JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求

    JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求 哇,一看标题怎么这么长啊,其实意思很简单,哥讨厌用HTTP Client做POST与GET提交 觉得那个毕竟是别人写 ...

  7. java web基础2HTTP协议知识点总结

    一.HTTP协议基础 1.定义:HTTP是基于TCP连接的浏览器与服务器通信协议.(即传输层先用TCP三次握手建立连接,进而HTTP通信) 2.连接原理:先进行TCP建立端到端连接,然后发送和接受HT ...

  8. Java Socket编程----通信是这样炼成的

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  9. 如何为可扩展系统进行Java Socket编程

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

随机推荐

  1. 计算机程序的思维逻辑 (47) - 堆和PriorityQueue的应用

    45节介绍了堆的概念和算法,上节介绍了Java中堆的实现类PriorityQueue,PriorityQueue除了用作优先级队列,还可以用来解决一些别的问题,45节提到了如下两个应用: 求前K个最大 ...

  2. linux2.6 内存管理——逻辑地址转换为线性地址(逻辑地址、线性地址、物理地址、虚拟地址)

    Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同.Linux运行在虚拟存储空间,并负责把系 ...

  3. 【NLP】大数据之行,始于足下:谈谈语料库知多少

    大数据之行,始于足下:谈谈语料库知多少 作者:白宁超 2016年7月20日13:47:51 摘要:大数据发展的基石就是数据量的指数增加,无论是数据挖掘.文本处理.自然语言处理还是机器模型的构建,大多都 ...

  4. 父页面操作iframe子页面的安全漏洞及跨域限制问题

    一.父子交互的跨域限制 同域情况下,父页面和子页面可以通过iframe.contentDocument或者parent.document来交互(彼此做DOM操作等,如父页面往子页面注入css). 跨域 ...

  5. request 对象和 response 对象

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...

  6. MSSQL练习题

    下列属于SQL Server的系统数据库是( ) A.modelB.publicC.NorthwindD.System 答案:http://hovertree.com/tiku/bjaf/06nvv7 ...

  7. 深入Collection集合

    List集合 一.ArraryList: 最基本的集合不多做介绍 二.Vector Vector cn=new  Vector(); A:有特有功能 a:添加       public void ad ...

  8. Android 手机卫士8--删除通话记录

    1.编写代码需要注意bug: 再删除通话记录的时候,删除的是以前的通话记录,本次拦截下来的电话号码,通话记录没有删除?????? 问题原因:数据库中本次通话记录的电话号码还没有插入,就做了删除操作 2 ...

  9. 用java单例模式实现面板切换

    1.首先介绍一下什么是单例模式: java单例模式是一种常见的设计模式,那么我们先看看懒汉模式: public class Singleton_ { //设为私有方法,防止被外部类引用或实例 priv ...

  10. Android核心组件 Activity组件

    1.Activity简介 四大组件之一的Activity组件,在应用中一个Activity可以用来表示一个界面,中文意思也可以理解为"活动",即一个活动开始,代表Activity组 ...