一、TCP协议
注:一般给对方发送IP地址,一般是为公网IP(因为有可能不在同个私网/局域网);若确定在同个私网中,则可以发送私网IP地址
二、HTTP协议
http协议的原理(通过socket来封装请求和响应内容)
public class HttpServer {
public static void main(String[] args) throws IOException{
ServerSocket serverSocket = new ServerSocket(8888);
//一直监听,直到受到停止的命令
while (true) {
Socket socket = null;
try {
//如果没有请求,会一直hold在这里等待,有客户端请求的时候才会继续往下执行
socket = serverSocket.accept();
//使用多线程技术优化(线程池)
// log
BufferedReader bufferedReader = new BufferedReader(
//获取输入流(请求)
new InputStreamReader(socket.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null
//得到请求的内容,注意这里作两个判断非空和""都要,只判断null会有问题
) {
System.out.println(line);
stringBuilder.append(line).append("<br>");
}
String result = stringBuilder.toString();
// System.out.println(result);
// echo
//这里第二个参数表示自动刷新缓存
PrintWriter printWriter = new PrintWriter(
socket.getOutputStream(), true);
printWriter.print("HTTP/1.1 200 OK
");
printWriter.print("Content-Type:text/html;charset=utf-8
");
printWriter.print("
");
printWriter.print("<h5>你刚才发送的请求数据是:<br>
");
printWriter.write(result);//将日志输出到浏览器
printWriter.print("</h5>
");
// release
printWriter.close();
bufferedReader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
if(serverSocket != null) {
serverSocket.close();
}
}
}
}
}
socket:阻塞
nio:非阻塞