java网络编程及Throw异常

异常

什么是异常(狭义的  Exception  可以处理的)

异常体系

Throwable

Error

Exception

​       运行时异常

​       编译期异常

异常处理

try

catch

finally

throws

throw

自定义异常





throws:在方法参数列表后面,是用来声明此方法有可能会出现异常,谁调用谁处理。注意,运行期异常不主动提示,检查异常会主动提示

throw关键字用于显示抛出异常,在方法体内,当不满足某种条件时,主动抛出一个异常对象,程序不再向后执行。

自定义异常:Java API中定义的标准异常类,都是与语法有关的(例如索引越界,空指针),但是我们程序有可能不满足某种业务条件时,想以抛出异常的形式处理,此时就需要自定义一个与业务相关的异常类来表示(例如分数不合法,提供ScoreException

示例:

package exception;

import java.util.Hashtable;

//异常处理(throw)
public class ThrowText {
    public static void main(String[] args) {
        try {
            char res = checkscore(110);
            System.out.println(res);
        } catch(Exception e){
            e.printStackTrace();
            System.out.println(e.getMessage());
        }

        //new Hashtable<>().put(null,null);
        //"aa".charAt(1);

    }
    public static char checkscore(int score) throws Exception {
        if(score < 0 || score >100){
            throw new Exception("分数不合法");  //在程序不满足某种条件时,主动抛出一个异常对象,程序就不能继续向下执行
        }
        else if(score >= 90){
            return 'A';
        }
        else if(score >= 80){
            return 'B';
        }
        else{
            return 'C';
        }
    }
}

package exception;

//自定义异常
public class ThrowText2 {
    public static void main(String[] args) {
        try {
            char res = checkscore(110);
            System.out.println(res);
        } catch(ScoreException e){
            e.printStackTrace();
            System.out.println(e.getMessage());
        }

        //new Hashtable<>().put(null,null);
        //"aa".charAt(1);

    }
    public static char checkscore(int score) throws ScoreException{
        if(score < 0 || score >100){
            throw new ScoreException("分数不合法");  //在程序不满足某种条件时,主动抛出一个异常对象,程序就不能继续向下执行
        }
        else if(score >= 90){
            return 'A';
        }
        else if(score >= 80){
            return 'B';
        }
        else{
            return 'C';
        }
    }
}

package exception;

public class ScoreException extends Exception{
    public ScoreException() {
    }

    public ScoreException(String message) {
        super(message);
    }
}

网络编程

网络编程概述

什么是计算机网络
   把不同区域的计算机通过通信设备和线路连
   接起来,实现数据的传输和共享的系统。
   实现不同计算机之间的联系,必须有介质连接。
   
网络编程是干什么
  (借助计算机网络,实现所写的程序,在不同的电脑上,可以进行数据传输)
   聊天--->聊天软件
   Java语言是支持网络间的数据传输的。将底层的细节封装起来了,给程序员提供了一套标准的类库,很方便使用Java语言开发出可以进行网络通信的软件。

网络编程核心问题
   如何找到网络世界中的目标主机,以及目标软件
   (win+r  cmd  ipconfig  查看自己电脑的IP)
   如何安全可靠的进行数据传输(协议,即规则)

网络的一些基本知识

网络模型
  OSI参考模型,是一个理想化的标准模型
     分成7层
  实际上的使用:Tcp/ip网络模型
     分成4层
       应用层(http)
       运输层(协议)
       网络层(IP)
       物理层(硬件设备)
  网络传输数据为什么要分层
     在不同的层中,对数据加入不同的头(协议,IP),逐层分工

网络通信要素(IP:找主机 ; 端口:找程序 ; 协议)
   目标主机,目标软件(IP+端口)
     IP:在网络世界中,是计算机的地址
         局域网地址,连接到路由器,会自动分配IP
         广域网地址,家里的宽带,与外界连接
         本机地址,本地回环地址(127.0.0.1)
     端口:是计算机中运行中的程序的编号,对应的是程序
       端口号: 0-65535 之间,但由于 0-1024 被一些系统程序使用,因此自己开发的程序为 1024-65535 之间,但是不能与已有的端口冲突
     通信协议:如何安全传输协议
       为了安全可靠地进行数据传输,需要对传输内容、速率、出错后的处理办法等进行控制,而制定的一些规约。

传输层的两个主要协议:

TCP(传输控制协议)
    使用TCP协议进行数据传输前,必须先检测网络是否通畅,客户端是否能连接到服务器端,如果能连接到,则进行数据传输,如果连接不到,会报错
    连接采用三次握手的机制
    是可靠的,相对UDP效率低
    断开采用四次握手机制
       
UDP(用户数据报协议)
    将数据封装成一个一个数据报,数据报中包括数据源(自己电脑IP)、目标(接收端IP端口),发送前不需要建立连接,只管发送,是否成功不知道,是不安全的,但效率高

示例:

import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ServerPro {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(9999);

            Socket socket = serverSocket.accept();  //监听是否有客户端连接到服务器,监听时,会阻塞程序

            while(true){
                //接受客户端的信息
                InputStream inputStream = socket.getInputStream();
                DataInputStream dataInputStream = new DataInputStream(inputStream);
                String s = dataInputStream.readUTF();
                System.out.println("客户端说:"+s);

                //向客户端回发消息
                OutputStream outputStream = socket.getOutputStream();
                DataOutputStream dataOutputStream = new DataOutputStream(outputStream);  //数据流处理,输出字符串

                Scanner scanner = new Scanner(System.in);
                System.out.println("服务器端输入:");
                String s1 = scanner.next();

                dataOutputStream.writeUTF(s1);
            }

        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("服务器启动失败,端口被占用");
        }
    }
}

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class ClientPro {
    public static void main(String[] args) {
        //创建客户端
        try {
            Socket socket = new Socket("127.0.0.1",9999);

            while(true){
                //向服务器发送信息
                OutputStream outputStream = socket.getOutputStream();
                DataOutputStream dataOutputStream = new DataOutputStream(outputStream);  //数据流处理,输出字符串

                Scanner scanner = new Scanner(System.in);
                System.out.println("客户端输入:");
                String s = scanner.next();

                dataOutputStream.writeUTF(s);

                //接受服务器的消息
                InputStream inputStream = socket.getInputStream();
                DataInputStream dataInputStream = new DataInputStream(inputStream);
                String s1 = dataInputStream.readUTF();
                System.out.println("服务器端说:"+s1);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值