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

IP


  • ip地址:
    • 在计算机网络中,唯一确定一台计算机
    • 127.0.0.1:本机回环地址
    • ip地址的分类(IPV4)
      • 分为A类、B类、C类地址,其区别在于A、B、C类子网的个数和所包含的地址个数不同。
      • 局域网网段10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255、192.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();
    }
}
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值