网络编程

网络编程三要素

 01.三要素
     A:IP地址
     B:端口
     C:协议
     IP地址:网络中计算机的唯一标识

     IP地址的组成:网络号段+主机号段
        A类:第一号段为网络号段+后三段的主机号段
        一个网络号:256*256*256 = 16777216
        B类:前二号段为网络号段+后二段的主机号段
        一个网络号:256*256 = 65536
        C类:前三号段为网络号段+后一段的主机号段
        一个网络号:256

    IP地址的分类:
    A类  1.0.0.1---127.255.255.254   (1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)                           (2)127.X.X.X是保留地址,用做循环测试用的。
    B类  128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
    C类  192.0.0.1---223.255.255.254 192.168.X.X是私有地址
    D类  224.0.0.1---239.255.255.254     
    E类  240.0.0.1---247.255.255.254

两个DOS命令:
    ipconfig 查看本机ip地址
    ping 后面跟ip地址。测试本机与指定的ip地址间的通信是否有问题

特殊的IP地址:
    127.0.0.1 回环地址(表示本机)
    x.x.x.255 广播地址
    x.x.x.0 网络地址


  端口号:正在运行的程序的标识
      有效端口:0~65535,其中0~1024系统使用或保留端口。

  协议:通信的规则


UDP:
    把数据打包
    数据有限制
    不建立连接
    速度快
    不可靠

TCP:
    建立连接通道
    数据无限制
    速度慢
    可靠  

Socket通信原理
Socket通信原理图解
UDP协议发送和接收

 01.图解
 ![UDP协议的发送和接收图解](https://img-blog.csdn.net/20170817103836127?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2lybF9uaW5l/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
 02.InetAddress类的概述
 public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象
public class cb {
  public static void main(String[] args) throws IOException {
    InetAddress address=InetAddress.getByName("FAH-PC");
    String ipString=address.getHostAddress();
    System.out.println(ipString);

}
}
 03.UDP协议的接收和发送代码
 A.接收代码,先有接收代码,发送才有目的地
public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        // 创建接收端的Socket对象
        DatagramSocket ds = new DatagramSocket(12345);

        // 创建一个包裹
        byte[] bys = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bys, bys.length);

        // 接收数据
        ds.receive(dp);

        // 解析数据
        String ip = dp.getAddress().getHostAddress();
        String s = new String(dp.getData(), 0, dp.getLength());
        System.out.println("from " + ip + " data is : " + s);

        // 释放资源
        ds.close();
    }
}
   B.发送代码
public class SendDemo {
    public static void main(String[] args) throws IOException {
        // 创建发送端的Socket对象
        DatagramSocket ds = new DatagramSocket();

        // 创建数据并打包
        byte[] bys = "helloworld".getBytes();
        DatagramPacket dp = new DatagramPacket(bys, bys.length,
                InetAddress.getByName("172.20.163.44"), 12345);

        // 发送数据
        ds.send(dp);

        // 释放资源
        ds.close();
    }
}
04.TCP协议接收和发送数据
/*
 * TCP协议接收数据:
 * A:创建接收端的Socket对象
 * B:监听客户端连接。返回一个对应的Socket对象
 * C:获取输入流,读取数据显示在控制台
 * D:释放资源
 */
public class tcpreceive {
    public static void main(String[] args) throws IOException{
     ServerSocket ss=new ServerSocket(4445);
     Socket s=ss.accept();
     InputStream is=s.getInputStream();
     byte[] bytes=new byte[1024];
     String st=new String(bytes, 0, is.read(bytes));
     String ip = s.getInetAddress().getHostAddress();
     System.out.println(ip+"-------"+st);
     s.close();

    }
}
/*
 * TCP协议发送数据:
 * A:创建发送端的Socket对象
 *      这一步如果成功,就说明连接已经建立成功了。
 * B:获取输出流,写数据
 * C:释放资源
 * 
 * 连接被拒绝。TCP协议一定要先看服务器。
 * java.net.ConnectException: Connection refused: connect
 */
public class tcpsend {
public static void main(String[] args) throws IOException {
    Socket so=new Socket("172.20.163.41",4445);
    OutputStream os=so.getOutputStream();
    os.write("helloworld".getBytes());
    so.close();




}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值