1. 程式人生 > >tcp socket客戶端傳送請求連線http服務

tcp socket客戶端傳送請求連線http服務

首先模擬一個http服務端,用於接收請求

package bhpp.rsserver.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.net
.ssl.HttpsURLConnection; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; public class HttpServerTest { private ExecutorService pool=Executors.newCachedThreadPool(); public HttpServerTest(){ try { HttpServer server=HttpServer.create
(new InetSocketAddress(6666), 3000); server.createContext("/",new Handler()); server.setExecutor(pool); server.start(); System.out.println("Http 啟動..."); } catch (IOException e) { e.printStackTrace(); } } class Handler implements HttpHandler{ @Override public void handle(HttpExchange exc) throws IOException { BufferedReader reader=new BufferedReader(new InputStreamReader(exc.getRequestBody
())); //用於儲存請求資訊 String requestMessage=reader.readLine(); System.out.println(requestMessage); String response="true"; exc.sendResponseHeaders(HttpsURLConnection.HTTP_OK, response.getBytes().length); OutputStream out=exc.getResponseBody(); out.write(response.getBytes()); out.flush(); out.close(); exc.close(); } } public static void main(String[] args) { new HttpServerTest(); } }

其次socket傳送請求連線http服務

package bhpp.rsserver.test;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.URLEncoder;

/**TCP 客戶端連線HTTP服務端
 * @author cyq
 *
 */
public class TcpToHttpClient{

    public TcpToHttpClient() throws IOException {
        //sendPost();
        sendGet();
    }
    public static void main(String[] args) throws IOException {
        new TcpToHttpClient();
    } 

    /**post方式
     * @throws IOException
     */
    public void sendPost() throws IOException{

        String path = "/";  
        String data = URLEncoder.encode("username", "utf-8") + "=" + URLEncoder.encode("zs", "utf-8") + "&" +  
                URLEncoder.encode("pwd", "utf-8") + "=" + URLEncoder.encode("32", "utf-8");
        SocketAddress dest = new InetSocketAddress("localhost", 6666);
        Socket socket = new Socket();
        socket.connect(dest);

        OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream(), "utf-8");
        BufferedWriter bufferedWriter = new BufferedWriter(streamWriter);

        bufferedWriter.write("POST " + path + " HTTP/1.1\r\n");
        bufferedWriter.write("Host: " + "localhost" + "\r\n");
        bufferedWriter.write("Content-Length: " + data.length() + "\r\n");
        bufferedWriter.write("Content-Type: application/x-www-form-urlencoded\r\n"); 
        bufferedWriter.write("\r\n");
        bufferedWriter.write(data);
        bufferedWriter.flush();
        bufferedWriter.write("\r\n"); 
        bufferedWriter.flush();

        BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());  
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));  
        String line = null;
        while((line = bufferedReader.readLine())!= null){  
            System.out.println(line);  
        }  
        bufferedReader.close();  
        bufferedWriter.close();  
        socket.close();  
    }

    /**get方式
     * @throws IOException
     */
    public void sendGet() throws IOException{

        String path = "/";
        SocketAddress dest = new InetSocketAddress("localhost", 6666);
        Socket socket = new Socket();
        socket.connect(dest);
        OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream());
        BufferedWriter bufferedWriter = new BufferedWriter(streamWriter);

        bufferedWriter.write("GET " + path + " HTTP/1.1\r\n");
        bufferedWriter.write("Host: " + "localhost" + "\r\n");
        bufferedWriter.write("\r\n");
        bufferedWriter.flush();

        BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));  
        String line = null;
        while((line = bufferedReader.readLine())!= null){
            System.out.println(line);
        }
        bufferedReader.close();
        bufferedWriter.close();
        socket.close();
    }
}