1. 程式人生 > >通過socket收發Http請求

通過socket收發Http請求

話不多說,直接上程式碼

package testSockate;

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協議報文
 * Created by zsl on 2017/8/5.
 */
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; } } 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()); } } }