Day14:Java网络编程上

Day14:Java网络编程上

网络通信要素

  • ip

  • 端口号

  • 192.168.16.124:5900 //ip:端口号

TCP/IP参考模型

 

 

IP

ip地址:java.net.InetAddress

  • 127.0.0.1:本机 localhost

  • ABCD类【百度吧】

  • ip地址的分类

    • ipv4/ipv6

      • IPV4 127.0.0.1 4个字节组成;覆盖42亿;30亿都在北美,亚洲4亿;2011年已用尽。

      • IPV6 128位;8个无符号整数;image-20210616210507565

    • 公网(互联网)- 私网(局域网)

      • ABCD类地址

      • 192.168.xx.xx 专门给组织内部使用的

  • 域名:记忆IP问题!

    • IP:wanwang.aliyun.com

InetAddress

InetAddress InetAddress.getByName("127.0.0.1")

InetAddress InetAddress.getByName("localhost")

InetAddress InetAddress.getByName("www.baidu.com")

InetAddress InetAddress.getLocalHost();

端口

  • 被规定0~65535

  • 单个协议下,端口号不能冲突

  • 端口分类

    • 共有端口 0~1023

      • HTTP:80

      • HTTPS:443

      • FTP:21

      • Telnet:23

    • 程序注册端口:1024~49151,分配用户或者程序

      • Tomcat:8080

      • MySQL:3306

      • Oracle:1521

    • 动态、私有:49152~65535

      netstat -ano #查看所有的端口
      netstat -ano|findstr "5900" #查看指定的端口
      tasklist|findstr "8696" #查看指定端口的进程
      Ctrl + shift + esc #打开任务管理器快捷键
  • 端口映射:C盘 - Windows - System32 - drivers - etc - host -127.0.0.1 “test”

  • InetSocketAddress

通信协议

网络通信协议

速率、传输码率、代码结构、传输控制...

TCP/IP协议簇:实际上是一组协议

IP:网络互连协议

TCP与UDP对比

TCP:打电话

  • 连接,稳定

  • 三次握手、四次挥手

  • 客户端-服务端

  • 传输完成,释放连接,效率低

UDP:发短信

  • 不连接,不稳定

  • 客户端-服务端:没有明确的界限

  • 不管有没有准备好,都可以发给你

  • 导弹

  • DDOS:洪水攻击!(饱和攻击)

TCP

写两个类

客户端

1.连接服务器Socket

2.发送消息

package test;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TestClient {

  public static void main(String[] args) {
      InetAddress serverIp = null;
      Socket socket = null;
      OutputStream os = null;
      int port = 6426;

      try {
          serverIp = InetAddress.getByName("127.0.0.1");
          socket = new Socket(serverIp, port);
          os = socket.getOutputStream();
          os.write("收到没啊服务器!".getBytes());
      } catch (Exception e) {
          e.printStackTrace();
      }finally{
          if(os!=null){
              try {
                  os.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          if(socket!=null){
              try {
                  socket.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
  }

}

服务端

1.建立服务端的端口 ServerSocket

2.等待用户的链接 accept

3.接收用户的消息

package test;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {

  public static void main(String[] args) {

      try (ServerSocket serverSocket = new ServerSocket(6426);
            Socket accept = serverSocket.accept();
            InputStream is = accept.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
          byte[] buffer = new byte[1024];
          int len;
          while ((len=is.read(buffer))!=-1){
              baos.write(buffer,0,len);
          }
          System.out.println(baos.toString());

      } catch (IOException e) {
          e.printStackTrace();
      }

  }

}
posted @ 2021-06-21 23:18  Layman52  阅读(43)  评论(0)    收藏  举报