socket编程

服务器端:

package server;   
  
import java.io.InputStream;   
import java.io.OutputStream;   
import java.net.ServerSocket;   
import java.net.Socket;   
  
public class HttpServer   
{   
    public static void main(String args[])   
    {   
        int port;   
        ServerSocket serverSocket;   
        try  
        {   
            port = Integer.parseInt(args[0]);   
        }   
        catch (Exception e)   
        {   
            System.out.println("prot = 8080 (默认的)");   
            port = 8080;   
        }   
        try  
        {   
            serverSocket = new ServerSocket(port);   
            System.out.println("服务器端正在监听端口:" + serverSocket.getLocalPort());   
            while (true)   
            {   
                final Socket socket = serverSocket.accept();   
                System.out.println("建立了与客户的一个新的TCP连接,该客户的地址为:" + socket.getInetAddress() + ":" + socket.getPort());   
                service(socket);   
            }   
               
        }   
        catch (Exception e)   
        {   
            e.printStackTrace();   
        }   
    }   
       
    public static void service(Socket socket)   
        throws Exception   
    {   
        InputStream in = socket.getInputStream();// 获取输入流   
        Thread.sleep(500);// 多线程应该多学学。睡眠500毫秒,等待http请求   
           
        /* ------ 获取流组装成字符串start--------- */  
  
        int size = in.available();   
        byte[] buffer = new byte[size];   
        in.read(buffer);   
        String request = new String(buffer);   
           
        /* -------------end------------ */  
        System.out.println(request);   
           
        String firstLineOfRequest = request.substring(0, request.indexOf("\r\n"));   
           
        String[] parts = firstLineOfRequest.split(" ");   
           
        String uri = parts[1];   
           
        String contentType;   
           
        if (uri.indexOf("html") != -1 || uri.indexOf("htm") != -1)   
            contentType = "text/html";   
        else if (uri.indexOf("jpg") != -1 || uri.indexOf("jpeg") != -1)   
            contentType = "image/jpeg";   
        else if (uri.indexOf("gif") != -1)   
            contentType = "image/gif";   
        else  
            contentType = "application/octet-stream";   
           
        String firstLineResponse = "HTTP/1.1 200 OK\r\n";   
           
        String responseHeader = "Content-Type:" + contentType + "\r\n\r\n";   
           
        // 获取本地文件的输入流,获取package下的文件路径   
        InputStream stream = HttpServer.class.getResourceAsStream("/root/" + uri);   
        OutputStream out = socket.getOutputStream();   
        buffer = new byte[stream.available()];   
        stream.read(buffer);   
        String response = new String(buffer);   
        StringBuilder builder = new StringBuilder();   
        builder.append(firstLineResponse);   
        builder.append(responseHeader);   
        builder.append(response);   
        out.write(builder.toString().getBytes());   
        Thread.sleep(1000);   
        socket.close();   
    }   
}  

 

客户端 :

package client;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class HTTPClient
{
    public static void main(String[] args)
    {
        String uri = "index.html";
        if (args.length != 0)
            uri = args[0];
        
        doGet("127.0.0.1", 8080, uri);
        
    }
    
    public static void doGet(String host, int port, String uri)
    {
        Socket socket = null;
        try
        {
            socket = new Socket(host, port);
            
            StringBuffer sb = new StringBuffer("GET " + uri + " HTTP/1.1\r\n");
            
            sb.append("Accept : */*\r\n");
            sb.append("Accept-Language: zh-cn\r\n");
            sb.append("Accept-Encoding:gzip,deflate\r\n");
            sb.append("User-Agent:HTTPClient\r\n");
            sb.append("Host:localhost:8080\r\n");
            sb.append("Connection:Keep-Alive\r\n\r\n");
            // 发送HTTP请求
            OutputStream out = socket.getOutputStream();
            out.write(sb.toString().getBytes());
            
            Thread.sleep(2000);
            // 接受响应结果
            InputStream in = socket.getInputStream();
            int size = in.available();
            
            byte[] buffer = new byte[size];
            
            in.read(buffer);
            System.out.println(new String(buffer));
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try
            {
                socket.close();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值