字节码学院之javasocket控制台聊天室(代码片段)

author author     2022-12-15     345

关键词:

学了个把月基础,终于写出了一个双工通信的控制台版本的聊天室了,废话不说啦,直接上代码:
服务端代码

package com.zijiemaedu.socketdemo;

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

/**
 * @author: Mr-zhang
 * @create: 2019-05-30 09:48
 * @emall: [email protected]
 * @program: thread-demo
 * @ClassName: Server
 * @purpose:
 */
public class Server 
    public final static int PORT = 8888; // 服务端监听端口

    public static void main(String[] args) throws IOException 
        ServerSocket server = new ServerSocket(PORT); // 服务端对象
        Socket socket = server.accept(); // 等待客户端链接(导致程序阻塞)
        InputStream inputStream = socket.getInputStream();// 获取客户端发送过来的数据流
        OutputStream outputStream = socket.getOutputStream();// 获取客户端发送过来的数据流

        // 将流进行转换
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));

        // 向客户端输出消息
        new Thread(new Runnable() 
            @Override
            public void run() 
                Scanner scanner = new Scanner(System.in);
                System.out.println("请输入您想发送给客户端的消息:");
                String line = scanner.next();
                while (line != null) 
                    try 
                        writer.write(line);
                        writer.newLine();
                        writer.flush();
                        System.out.println("请输入您想发送给客户端的消息:");
                        line = scanner.next();
                     catch (IOException e) 
                        e.printStackTrace();
                    
                
            
        ).start();

        String line = null;

        while ((line = reader.readLine()) != null) 
            System.out.println(line);
        

        socket.close();
        server.close();
    

客户端代码:

package com.zijiemaedu.socketdemo;

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

/**
 * @author: Mr-zhangY
 * @create: 2019-05-30 09:57
 * @emall: [email protected]
 * @program: thread-demo
 * @ClassName: Client
 * @purpose:
 */
public class Client 
    private final static String HOST = "localhost";
    private final static int PORT = Server.PORT;

    public static void main(String[] args) throws IOException 
        Socket socket = new Socket(HOST, PORT); // 创建客户端socket
        OutputStream output = socket.getOutputStream();
        InputStream inputStream = socket.getInputStream(); // 获取服务端输入过来的消息流

        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        new Thread(() -> 
            try 
                while (true) 
                    String message = reader.readLine();
                    System.out.println("服务端响应了: " + message);
                
             catch (IOException e) 
                e.printStackTrace();
            
        ).start();

        Scanner scanner = new Scanner(System.in);
        String input = scanner.next();

        while (input != null) 
            if ("q".equals(input)) 
                break;
            

            writer.write(input);
            writer.newLine();
            writer.flush();
            input = scanner.next();
        

        writer.close();
        socket.close();
    

有需要交流软件开发的同学可以加我qq哦,2680775774

jvm进阶之字节码指令解析(下篇)(代码片段)

字节码指令解析下篇一、控制转移指令1.比较指令2.条件跳转指令3.比较条件跳转指令4.多条件分支跳转指令5.无条件跳转指令二、异常处理指令1.异常抛出指令2.异常处理指令三、同步控制指令1.方法级的同步2.方法内指令序列的同... 查看详情

jvm进阶之字节码文件概述(代码片段)

字节码文件概述1.字节码文件的跨平台性2.前端编译器与后端编译器3.从字节码角度分析程序4.字节码文件解读的方式1.字节码文件的跨平台性Java语言被称为跨平台的语言,当Java源代码成功编译成字节码后,如果想在不同... 查看详情

jvm进阶之字节码指令概述(代码片段)

字节码指令概述1.基本介绍2.执行模型3.数据类型4.指令分类1.基本介绍Java字节码指令对于虚拟机,就好比汇编语言对于计算机,都属于基本执行指令。Java字节码指令由一个字节长度的、代表着某种特定操作含义的数字ÿ... 查看详情

小白看完都会了!javasocket编程聊天室(代码片段)

二、Spring生命周期的大胆猜测这里分享一个阅读源码的小技巧:捉大放小,连蒙带猜!8字真言,我们在阅读源码过程中,因为你要知道,每一个被开源出来的优秀框架,其源码的体系都是极其庞大复杂... 查看详情

androidgradle之java字节码(代码片段)

...数据区域Runtimedataarea5.JVM的内存模型JMM二从一个实例去看字节码文件1..class文件的基本信息 2.常量池(1)Methodref(2)Fieldref࿰ 查看详情

jvm进阶之字节码文件解析指令(代码片段)

字节码文件解析指令1.javac指令2.javap指令1.javac指令使用javac命令可以将源代码文件编译成字节码文件,然后就可以查看代码中的详细结构。对于命令行的方式而言,我们可以使用javacxx.java或者javac-gxx.java进行编译,只... 查看详情

字节码增强之javassist(代码片段)

字节码增强之JavassistJavassist(JavaProgrammingAssist)是编辑字节码的Java类库,它使Java字节码操作变得简单。通过使用Javassist可以使Java程序在运行时定义一个新的类,并且在JVM加载类文件时修改它。Javassist提供两个级别的API࿱... 查看详情

字节码增强之javassist(代码片段)

字节码增强之JavassistJavassist(JavaProgrammingAssist)是编辑字节码的Java类库,它使Java字节码操作变得简单。通过使用Javassist可以使Java程序在运行时定义一个新的类,并且在JVM加载类文件时修改它。Javassist提供两个级别的API࿱... 查看详情

字节码增强之javassist(代码片段)

字节码增强之JavassistJavassist(JavaProgrammingAssist)是编辑字节码的Java类库,它使Java字节码操作变得简单。通过使用Javassist可以使Java程序在运行时定义一个新的类,并且在JVM加载类文件时修改它。Javassist提供两个级别的API࿱... 查看详情

jvm进阶之字节码指令解析(中篇)(代码片段)

字节码指令解析中篇一、对象的创建与访问指令1.创建指令2.字段访问指令3.数组操作指令4.类型检查指令二、方法的调用与返回指令1.方法调用指令2.方法返回指令三、操作数栈管理指令1.基本概述2.指令分类3.程序举例一、对象的... 查看详情

jvm进阶之字节码文件结构(代码片段)

字节码文件结构1.文件格式2.文件结构官方文档:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html1.文件格式任何一个Class文件都对应着唯一的一个类或一个接口的定义信息,Class文件是一组由8位字节为基本单位的二进制流... 查看详情

androidgradle之java字节码(代码片段)

...radle中的Transform(六)        AndroidGradle之Java字节码(七)       AndroidGradle中的字节码插桩之ASM(八)      AndroidGradle中的使用ASMified插件生成.class的技巧(九)      AndroidGradle中的... 查看详情

androidaop编程之aspectj(代码片段)

一、AspectJAspectj是一个AOP框架,也是通过对字节码操作,来实现AOP的,但是与ASM需要开发者直接编写操作字节码的代码之外,使用Aspectj不需要开发者直接编写操作字节码代码,而是只需要按照规范编写我们需... 查看详情

javasocket编程--聊天小案例

  很久以前写过socket聊天室,都快忘完了,心血来潮又重新写一遍。服务器端:packagecom.fancy;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;imp 查看详情

javasocket模拟http协议客户端之post请求

相比于GET请求,POST报文多了如下几个要素:1,Content-Length,这个是上送报文的长度,以字节为单位2,Content-Type,这主要是涉及到报文的格式和字符集。3,就是主报文    主类SimpleHttpPost:package com.zws.http;import&n... 查看详情

字节码增强技术之javaagent入门(代码片段)

文章目录前言JavaAgent简介JavaInstrumentation核心方法JavaAgent核心流程JavaAgent使⽤demo预演总结前言分布式链路追踪中为了获取服务之间调用链信息,采集器通常需要在方法的前后做埋点。在Java生态中,常见的埋点方式有两种&#... 查看详情

深入java虚拟机之字节码执行引擎

...数据区,而且我们也知道了我们方法体内的代码被编译成字节码保存在方法表中的code属性中,那么虚拟机又是怎么执行这些代码的,得出方法输出结果的呢?这一节我们就要来学习,关于虚拟机字节码执行引擎的相关知识。通... 查看详情

javasocket通信之客户端程序发送和接收数据(代码片段)

 JavaSocket通信(一)之客户端程序发送和接收数据网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类。通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据。对... 查看详情