狂神java学习笔记——网络编程

IP

ip地址:

  • 在计算机网络中,唯一确定一台计算机
  • 127.0.0.1:本机回环地址

ip地址的分类(IPV4):

  • 分为A类、B类、C类地址,其区别在于A、B、C类子网的个数和所包含的地址个数不同。
  • 局域网网段10.0.0.0~10.255.255.255172.16.0.0~172.31.255.255192.168.0.0~192.168.255.255不会在公网中出现
  • 以及一些预留地址
  • 在对应子网中,第一个ip地址表示整个子网的地址,最后一个ip是这个子网的广播地址
//测试
public class Test1  {
    
    
    public static void main(String[] args) throws UnknownHostException {
    
    
        //使用ip
        InetAddress inetAddress1=InetAddress.getByName("127.0.0.1");
        System.out.println(inetAddress1);
        //使用域名
        InetAddress inetAddress2=InetAddress.getByName("www.csdn.net");
        System.out.println(inetAddress2);
        //LocalHost获取本机回环ip(127.0.0.1)
        InetAddress inetAddress3=InetAddress.getLocalHost();
        System.out.println(inetAddress3);

        //System.out.println(inetAddress2.getAddress());
        //System.out.println(inetAddress2.getCanonicalHostName());
        System.out.println(inetAddress2.getHostAddress());//ip
        System.out.println(inetAddress2.getHostName());//域名
    }
}

端口

  • 不同进程监听不同的端口
  • UDP和TCP协议端口号独立,可以同时有UDP和TCP的80端口
  • 端口号0~65535
  • 其中1023以内端口为约定端口 比如80端口为http服务
  • 1024~49151,分配用户或者应用程序
  • 剩下是动态、私有端口
netstat -ano #查看所有端口
netstat -ano|findstr "XXXXX" #查看指定的端口
tasklist|findstr "XXXX" #查看指定端口发进程

网络通信协议

  • 各个端间通信的标准,使得接收方和发送方对数据没有歧义,同时规定端间数据传输的速率、包/帧结构、实现传输控制等。
  • 主要:TCP/IP协议簇

TCP

三次握手 四次挥手,面向连接相对稳定,

客户端

  • 连接服务器Socket
  • 发送消息

服务器

  • 建立服务端口ServerSocket
  • 等待用户的连接accept
  • 接受用户的消息
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

//客户
public class Test3 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //要知道服务器地址
        InetAddress sAddress=InetAddress.getByName("127.0.0.1");
        //端口号
        int port=9999;
        //创建socket连接
        Socket socket=new Socket(sAddress,port);
        //发送消息,IO流
        OutputStream stream=socket.getOutputStream();
        stream.write("hello".getBytes());
        //关闭资源
        stream.close();
        socket.close();

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

//服务
public class Test4 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        //需要有一个地址
        ServerSocket serverSocket=new ServerSocket(9999);
        //等待客户端连接
        Socket socket=serverSocket.accept();
        //读取消息
        InputStream is=socket.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());
        baos.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

UDP

  • 不用建立连接,但是需要地址
import java.net.*;

//不需要连接服务器
public class Test5 {
    
    
    public static void main(String[] args) throws Exception {
    
    
        //建立Socket
        DatagramSocket socket=new DatagramSocket();

        //打包数据包
        String msg="hello";
        new DatagramPacket(msg.getBytes(),0,msg.getBytes().length);
        //发送
        InetAddress address=InetAddress.getByName("127.0.0.1");
        int post=9090;
        DatagramPacket packet=new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,address,post);

        socket.send(packet);
        socket.close();
    }
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;

//服务器端,等待客户端的数据包
public class Test6 {
    
    
    public static void main(String[] args) throws Exception {
    
    
        //开放端口
        DatagramSocket socket=new DatagramSocket(9090);
        //接受数据包
        byte[] buffer=new byte[1024];
        DatagramPacket packet=new DatagramPacket(buffer,0,buffer.length);
        socket.receive(packet);//阻塞接受
        System.out.println(new String(packet.getData()));
        //关闭连接
        socket.close();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45277161/article/details/134771383