java socket收發http協議內容


來自: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());
         }
     }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM