网络编程和枚举

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。网络编程和枚举,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

TCP网络通信

服务端代码


package com.llm.test.demo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {

    //服务端: 接受信息,响应信息
    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动了....");
        ServerSocket serverSocket = new ServerSocket(8080);
        //accept() 等待客户端发送信息,如果没有接收到,就一直阻塞线程
        Socket accept = serverSocket.accept();

        InputStream in = accept.getInputStream();
        OutputStream out = accept.getOutputStream();

        Scanner sc = new Scanner(System.in);
        while (true){
            byte[] bs = new byte[1024];
            int num = in.read(bs);
            String str = new String(bs, 0, num);
            System.out.println("客户端发送过来的信息是:"+str);

            // 后发送
            System.out.println("请输入给客户端的回复:");
            //要回复的话直接往得到的socket的输出流里面输出数据就行
            String str2 = sc.next();
            if ("exit".equals(str)){
                System.out.println("我要走了,客户端");
                break;
            }
            out.write(str2.getBytes());
            out.flush();
        }
    }
}


客户端代码

package com.llm.test.demo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Client {

    //客户端: 接受信息,发送信息
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8080);
        OutputStream os = socket.getOutputStream();
        InputStream is = socket.getInputStream();
        // 先发送
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请输入要发送给服务端的信息");
            String str = sc.next();
            if ("exit".equals(str)){
                System.out.println("我要走了,服务端");
                break;
            }
            os.write(str.getBytes());
            os.flush();

            // 后接收用数据流
            byte[] bs = new byte[1024];
            int num = is.read(bs);
            String str2 = new String(bs,0,num);
            System.out.println("服务端给的回复:"+str2);
        }
        socket.close();
    }
}

UDP网络通信

接受端

 public static void main(String[] args) throws IOException {
        System.out.println("接收方启动了");
        // 接收方 需要设定端口号
        DatagramSocket socket = new DatagramSocket(7777);

        // 2. 接受   提前准备好一个空仓库
        byte[] bs = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bs,bs.length);// 能装数据,

        // 接受数据  如果一直没等到发送方的数据, receive方法阻塞  , 类似于TCP 中的 accept
        socket.receive(packet);

        String str = new String(packet.getData(),packet.getOffset(),packet.getLength());

        System.out.println("发送方发送过来的数据:"+str);

        System.out.println(packet.getAddress());
        System.out.println(packet.getPort());
        //   以下就是回复
        DatagramPacket p = new DatagramPacket("不开心".getBytes(), 0, "不开心".getBytes().length, packet.getAddress(), packet.getPort());
        socket.send(p);

        //3. 关闭socket
        socket.close();

    }

发送端

public static void main(String[] args) throws IOException {
        //快递点
        DatagramSocket socket = new DatagramSocket();
        //要发送的数据
        String str = "开心";
        //将数据打包
        DatagramPacket packet = new DatagramPacket(str.getBytes(),
                0,
                str.getBytes().length,
                InetAddress.getByName("127.0.0.1"),
                7777);
        //  发送
        socket.send(packet);
        // 以下是接受
        byte[] bs  = new byte[1024];
        DatagramPacket p = new DatagramPacket(bs, bs.length);
        socket.receive(p);

        String str2 = new String(p.getData(),p.getOffset(),p.getLength());
        System.out.println("接收方回复数:"+str2);

        //关闭
        socket.close();
    }

枚举

枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。下面先来看看什么是枚举?如何定义枚举?

public enum TIMEEnum {

    FIRST("上午1,2节(8:00-10:00)"),
    SECOND("上午3,4节(10:00-12:00)"),
    THIRD("下午1,2节(2:00-4:00)"),
    FIRTH("下午3,4节(4:00-6:00)");

    String desc;

    @Override
    public String toString() {
        return " " +
                desc +" ";
    }

    TIMEEnum(String desc) {
        this.desc = desc;
    }
}

相当简洁,在定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。枚举类型Day中分别定义了从周一到周日的值,这里要注意,值一般是大写的字母,多个值之间以逗号分隔。同时我们应该知道的是枚举类型可以像类(class)类型一样,定义为一个单独的文件,当然也可以定义在其他类内部,更重要的是枚举常量在类型安全性和便捷性都很有保证,如果出现类型问题编译器也会提示我们改进,但务必记住枚举表示的类型其取值是必须有限的,也就是说每个值都是可以枚举出来的,比如上述描述的一周共有七天。那么该如何使用呢?如下:

public class EnumDemo {

    public static void main(String[] args){
        //直接引用
        Day day =Day.MONDAY;
    }

}
//定义枚举类型
enum Day {
    MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

就像上述代码那样,直接引用枚举的值即可,这便是枚举类型的最简单模型。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/202480.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!