服务器端:
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();
}
}
}
}