zoukankan      html  css  js  c++  java
  • 网络编程,IP地址,TCP 编程 UDP编程

    package cn.socket001;
    //网络编程:
    /*网络概念
    把多台计算机通过物理线路连接起来,就形成了网络。目的在于交换数据和共享信息。
    
    网络通信的三要素
    【1】IP地址:唯一标识网络上的每一台计算机。两台计算机之间通信的必备有素
    【2】端口号:计算机中应用的标号(代表一个应用程序)
    0-1024系统使用或保留端口
    常见端口:http:80 stmp: 25 ftp:21
       有效端口0-65536,开发者可以的端口是1025-65536之间。一些第三方引用如mysql:3306 oracle:1251。
    【3】通信协议:通信的规则 TCP,UDP
    */
    import java.net.InetAddress;
    import java.net.InetSocketAddress;
    import java.net.UnknownHostException;
    
    public class Test01 {
    public static void main(String[] args) {
        //InetAddress 表示IP地址。( getLocalHost()  返回本地主机。)
        
        try {
            
            InetAddress ine=InetAddress.getLocalHost();
            System.out.println(ine.toString());
            //LATTOP-L0AH1H9U/192.168.6.130
            // 获取主机名称
            System.out.println(ine.getHostName());
            //LAPTTOP-L0AH1H9U
            System.out.println(ine.getHostAddress());
            //获取主机IP地址:192.168.6.130
            
            // 获取局域网指定名称网络主机的IP
            InetAddress ip1 = InetAddress.getByName("LATTOP-L0AH1H9U");
            System.out.println(ip1.toString());
            //LATTOP-L0AH1H9U/192.168.6.130
            
            // 在给定IP地址的情况下,获取主机IP信息
            byte[] ipArr = {(byte)192,(byte)168,(byte)2,(byte)130};
            InetAddress ip2 = InetAddress.getByAddress(ipArr);
            System.out.println(ip2.getHostName());
            //LATTOP-L0AH1H9U
            
            
            
            // 获取广域网指定名称网络主机的IP
            InetAddress ip3 = InetAddress.getByName("www.baidu.com");
            System.out.println(ip3.toString());
                //www.baidu.com/14.215.177.39
            InetAddress ip4 = InetAddress.getByName("www.bjsxt.com");
            System.out.println(ip4.toString());
            //www.bjsxt.com/47.93.94.43
            
        } catch (UnknownHostException e) {
        
            e.printStackTrace();
        }
        
    }
    }

    网络通信模型

    IP地址分类

    特殊IP

    • 0.0.0.0:本机
    • 127.0.0.1:本机回环地址,用于本机测试
    • 255.255.255.255:当前子网,一般用于向当前子网广播信息
    package cn.socket001;
    /*TCP编程中,如果要完成通信,通信双方必须要创建socket,通过socket完成通信。
     * 
     * TCP通信步骤
    [1] 服务器启动ServerSocket作为通信的Server端,等待客户端链入。
    [2] 客户端创建Socket作为通信的Client端
    [3] Client端链入Server端后建立可靠的、双向的、持续性的、点对点的通讯连接,即可通信。
    */
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    //服务器server socket
    public class Socket01 {
    public static void main(String[] args) {
        System.out.println("服务器启动");
        //[1]创建ServerSocket作为通信的Server端(服务器)
        ServerSocket se=null;
        //创建Socket作为通信的Client端,等待连接客户端
        Socket so=null;
        try {
            //serversocket的端点
            se=new ServerSocket(8000);
            //等待连接客户端
            so=se.accept();
            System.out.println(se.getInetAddress().getHostAddress()+"已连接");
            //客户端连接成功后向客户端发送信息
            OutputStream out=so.getOutputStream();
            String a="瓦爱你";
            byte [] buf=a.getBytes("utf8");
            out.write(buf);
            //向客户端表示已发送玩的提示信息
            so.shutdownOutput();
            
            
            //接受来自客户端的信息
            InputStream in=so.getInputStream();
            byte[] buf2=new byte[1024];
            int len=in.read(buf2);
            String st=new String(buf2,0,len,"utf8");
            System.out.println(so.getInetAddress().getHostAddress()+st);
            //向客户端表示已接收完
            so.shutdownInput();
            //关闭通道
            out.close();
            in.close();
        } catch (IOException e) {
            //数据流异常
            e.printStackTrace();
        }
        
    }
    }

    package cn.socket001;
    /*TCP编程中,如果要完成通信,通信双方必须要创建socket,通过socket完成通信。
     * 
     * TCP通信步骤
    [1] 服务器启动ServerSocket作为通信的Server端,等待客户端链入。
    [2] 客户端创建Socket作为通信的Client端
    [3] Client端链入Server端后建立可靠的、双向的、持续性的、点对点的通讯连接,即可通信。
    */
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    //客户端Socket
    public class Socket02 {
    public static void main(String[] args) {
        //创建Socket作为通信的Client端
        Socket so=null;
        try {
            //连接服务器(服务器地址,端口)
            so=new Socket("192.168.2.130",8000);
            //接收来自服务器的信息
            InputStream in=so.getInputStream();
            byte [] buf=new byte[1024];
            int len=in.read(buf);
            String st=new String(buf,0,len,"utf8");
            System.out.println(st);
            //接受完成
            so.shutdownInput();
            
            
            String st2="我也爱你";
                byte[] buf2=st2.getBytes("utf8");
                //向服务器发送信息
            OutputStream out=so.getOutputStream();
            out.write(buf2);
            //向服务器表示已发送完信息的提示信息
            so.shutdownOutput();
            //关闭通道
            out.close();
            in.close();
        } catch (IOException e) {
            //数据流异常
            e.printStackTrace();
        }
    }
    }
    
    


    常见异常

     端口被占用

    java.net.BindException: Address already in use: JVM_Bind

    服务器未启动

    java.net.ConnectException: Connection refused: connect

     连接超时异常

     SocketTimeoutException  当网速很慢时,可能发生连接超时异常。

    UDP

    package cn.cn01;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.util.Scanner;
    
    import sc.IO.while01;
    
    
    /*UDP 编程(音频,视频)
     * UDP编程中,如果要完成通信,通信双方必须要创建DatagramSocket,通过DatagramSocket完成通信。
    数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器
    
    UDP步骤:
    [1] 创建一个DatagramSocket用于表示发送端,通过send方法发送数据报
    [2] 创建一个DatagramSocket用于表示接收端,通过receive方法发送数据报
     * */
    public class Client01 {
        //需求:写一个可以互相聊天的编程
    public static void main(String[] args) throws IOException {
        // 发送端:主动发送信息
        System.out.println("发送端开始发送信息...");
        Scanner sc=new Scanner(System.in);
        // 【1】创建socket并指定发送数据的端口
        DatagramSocket so=new DatagramSocket(8000);
    InetAddress i=InetAddress.getByName("192.168.2.235");
        // 【2】创建数据报包
        while(true){
            
        System.out.print("A说:");
        String msg=sc.nextLine();
        byte[] buy=msg.getBytes();
        
        DatagramPacket dp=new DatagramPacket(buy,buy.length,i,9000);
        so.send(dp);
        
        
        // 接收消息
        byte [] buy01=new byte[1024];
        DatagramPacket dp01=new DatagramPacket(buy01, buy.length);
        so.receive(dp01);
        String str=new String(buy01,0,dp01.getLength());
        System.out.println(dp01.getAddress().getHostName()+":"+str);
        
        }
    
        
    }
    }


    package cn.cn01;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.util.Scanner;
    
    //需求:写一个可以互相聊天的编程
    public class Client02 {
    public static void main(String[] args) throws IOException {
        // 接收端:接收信息
        System.out.println("启动接收端...");
        Scanner sc=new Scanner(System.in);
        
        // 【1】创建一个 DatagramSocket
        DatagramSocket so=new DatagramSocket(9000);
        // 【2】接收消息
        while(true){    
        byte[] buy =new byte[1024];
        DatagramPacket dp=new DatagramPacket(buy, buy.length);    
        so.receive(dp);
        String msg=new String(buy,0,dp.getLength());
        System.out.println(dp.getAddress().getHostName()+":"+msg);
        
        
        // 发送信息
        System.out.println("B说:");
        String str=sc.nextLine();
        byte [] bye=str.getBytes();
        DatagramPacket dd=new DatagramPacket(bye,0, bye.length, dp.getAddress(), dp.getPort());
        so.send(dd);
    }
    }
    }
    
    
    
     
  • 相关阅读:
    AUPE学习第八章------进程控制
    软件工程中的一些图
    java_web用户的自动登录模块的实现
    opencv安装/usr/bin/ld: warning: libpcre.so.1, needed by //home/qian/anaconda3/lib/libglib-2.0.so.0, not found (try using -rpath or -rpath-link)问题
    ubuntu 安装使用多版本opencv
    基于运动学模型的模型预测控制
    粒子群滤波
    深度学习环境搭建
    安装uWebSocketIO
    最小二乘原理(3)——递归最小二乘
  • 原文地址:https://www.cnblogs.com/406070989senlin/p/10846376.html
Copyright © 2011-2022 走看看