IP

InetAddress
image.png
image.png

端口

端口表示计算机上的一个程序的进程
不同的进程有不同的端口号!用来区分软件
被规定0-65535

  • TCP UDP:65535*2tcp:80,udp:80吗,单个协议下,端口号不能中突
  • 端口分类
    • 公有端口0-1023
      • HTTP:80
      • HIPS: 443
      • FTP: 21
      • Telent 23
    • 程序注册端口:1024~49151,分配用户或者程序
      • Tomcat: 8080
      • MYSQL: 3306
      • Oracle: 152
    • 动态、私有:49152~65535
  1. netstat-ano#查看所有的端口
  2. netstat- ano findstr"5900"#查看指定的端口
  3. tasklist findstr"8696"#查看指定端口的进程
  4. Ctrl+ shift+ ESC

JAVA ServerSocket

  1. package server;
  2. import java.io.*;
  3. import java.net.*;
  4. public class HTTPServer{
  5. public static void main(String args[]) {
  6. int port = 8080;
  7. ServerSocket serverSocket;
  8. try{
  9. serverSocket = new ServerSocket(port);
  10. System.out.println("服务器正在监听端口:"
  11. + serverSocket.getLocalPort());
  12. while(true) { //服务器在一个无限循环中不断接收来自客户的TCP连接请求
  13. try{
  14. //等待客户的TCP连接请求
  15. final Socket socket = serverSocket.accept();
  16. System.out.println("建立了与客户的一个新的TCP连接,"
  17. +"该客户的地址为:"
  18. +socket.getInetAddress()+":" + socket.getPort());
  19. service(socket); //响应客户请求
  20. }catch(Exception e){
  21. System.out.println("客户端请求的资源不存在");}
  22. } //#while
  23. }catch (Exception e) {e.printStackTrace();}
  24. }
  25. /** 响应客户的HTTP请求 */
  26. public static void service(Socket socket)throws Exception{
  27. /*读取HTTP请求信息*/
  28. InputStream socketIn=socket.getInputStream(); //获得输入流
  29. Thread.sleep(500); //睡眠500毫秒,等待HTTP请求
  30. int size=socketIn.available();
  31. byte[] buffer=new byte[size];
  32. socketIn.read(buffer);
  33. String request=new String(buffer);
  34. System.out.println(request); //打印HTTP请求数据
  35. /*解析HTTP请求*/
  36. //获得HTTP请求的第一行
  37. int endIndex=request.indexOf("\r\n");
  38. if(endIndex==-1)
  39. endIndex=request.length();
  40. String firstLineOfRequest=
  41. request.substring(0,endIndex);
  42. //解析HTTP请求的第一行
  43. String[] parts=firstLineOfRequest.split(" ");
  44. String uri="";
  45. if(parts.length>=2)
  46. uri=parts[1]; //获得HTTP请求中的uri
  47. /*决定HTTP响应正文的类型,此处作了简化处理*/
  48. String contentType;
  49. if(uri.indexOf("html")!=-1 || uri.indexOf("htm")!=-1)
  50. contentType="text/html";
  51. else if(uri.indexOf("jpg")!=-1 || uri.indexOf("jpeg")!=-1)
  52. contentType="image/jpeg";
  53. else if(uri.indexOf("gif")!=-1)
  54. contentType="image/gif";
  55. else
  56. contentType="application/octet-stream"; //字节流类型
  57. /*创建HTTP响应结果 */
  58. //HTTP响应的第一行
  59. String responseFirstLine="HTTP/1.1 200 OK\r\n";
  60. //HTTP响应头
  61. String responseHeader="Content-Type:"+contentType+"\r\n\r\n";
  62. //获得读取响应正文数据的输入流
  63. InputStream in=HTTPServer
  64. .class
  65. .getResourceAsStream("root/"+uri);
  66. /*发送HTTP响应结果 */
  67. OutputStream socketOut=socket.getOutputStream(); //获得输出流
  68. //发送HTTP响应的第一行
  69. socketOut.write(responseFirstLine.getBytes());
  70. //发送HTTP响应的头
  71. socketOut.write(responseHeader.getBytes());
  72. //发送HTTP响应的正文
  73. int len=0;
  74. buffer=new byte[128];
  75. while((len=in.read(buffer))!=-1)
  76. socketOut.write(buffer,0,len);
  77. Thread.sleep(1000); //睡眠1秒,等待客户接收HTTP响应结果
  78. socket.close(); //关闭TCP连接
  79. }
  80. }

image.png

tomcat

直接使用tomcat

找到安装目录
image.png

idea使用tomcat

新建JAVAEE模块
image.png
或者
image.png