TCP 客户端和服务器,使用 objectstreams 的 cmd 提示符

2023-12-31

我有一个客户端文件 clientRPC.java 和服务器文件 serverRPC.java。两者都使用TCP协议进行通信,并使用对象输入和输出流来传输数据。

我的客户文件:

public class clientRPC {

public static void main(String args[]) {

    Socket s = null;

    try {

        int serverPort = 8888;

        s = new Socket("localhost", serverPort);// server name is local host    

        //initializing input and output streams object and referencing them to get input and output
        ObjectInputStream in = null;
        ObjectOutputStream out = null;

        out = new ObjectOutputStream(s.getOutputStream());
        in = new ObjectInputStream(s.getInputStream());

        MathsTutor mt = new MathsTutor();


        out.writeObject(mt);
        out.flush();

        System.out.println("Welcome to Maths Tutor Service. The available maths exercises are:\n"
                + "Addition: Enter 'A' or 'a'\n"
                + "Subtraction: Enter 'S' or 's'\n"
                + "Multiplication: Enter 'M' or 'm'\n"
                + "Division: Enter 'D' or 'd'\n"
                + "Enter 'Q' or 'q' to quit");                       

        //System.out.println();

        MathsTutor mt1 = (MathsTutor) in.readObject();

        String response = in.readUTF();
        System.out.println(response);

    } catch (UnknownHostException e) {
        System.out.println("Socket:" + e.getMessage());
    } catch (EOFException e) {
        System.out.println("EOF:" + e.getMessage());
    } catch (IOException e) {
        System.out.println("readline:" + e.getMessage());
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    } finally {
        if (s != null) {
            try {
                s.close();
            } catch (IOException e) {
                System.out.println("close:" + e.getMessage());
            }
        }
    }
}
}

和我的服务器文件:

public class serverRPC extends Thread {

String request;
String response;

public static void main(String args[]) {

    try {
        int serverPort = 8888;
        ServerSocket listen_socket = new ServerSocket(serverPort);

        while (true) {
            Socket clientSocket = listen_socket.accept();
            Connection c = new Connection(clientSocket);
        }
    } catch (IOException e) {
        System.out.println("Listen socket:" + e.getMessage());
    }

public serverRPC(String s) {
    request = s;
}
}

class Connection extends Thread {

ObjectInputStream in;
ObjectOutputStream out;
Socket clientSocket;

public Connection(Socket aClientSocket) {

    try {
        clientSocket = aClientSocket;
        in = new ObjectInputStream(clientSocket.getInputStream());
        out = new ObjectOutputStream(clientSocket.getOutputStream());
        this.start();
    } catch (IOException e) {
        System.out.println("Connection:" + e.getMessage());
    }
}


public void run() {

    try {

        MathsTutor mt = (MathsTutor) in.readObject();
        InetAddress ip = clientSocket.getInetAddress();

        System.out.println("The Received Message from Client at address:/" + ip.getHostAddress());
        System.out.println("====================================");

        MathsTutor mt1 = new MathsTutor();
        out.writeObject(mt1);

         while(true)  {
            // Read from input
            String command = in.readUTF();
            System.out.println(command);

            }

        //System.out.println();

    } catch (EOFException e) {
        System.out.println("EOF:" + e.getMessage());
    } catch (IOException e) {
        System.out.println("readline:" + e.getMessage());
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    } finally {
        try {
            clientSocket.close();
        } catch (IOException e) {/*close failed*/

        }
    }
}
}

问题是当我在cmd上运行服务器然后运行客户端时,客户端显示欢迎消息并将光标放在另一行上以供用户输入,但是,我无法输入任何内容,光标只是闪烁...我知道这可能是很简单,但我已经花了 3 个小时,而且我陷入了同样的事情。

标有红色的光标一直闪烁,但不允许我输入任何内容。


你正在写一个对象writeObject()并尝试阅读它readUTF()。不合逻辑。

  • 写有的对象writeObject()必须与readObject().
  • 字符串写成writeUTF()必须与readUTF().
  • 原语写成writeXXX()必须与readXXX(),对于 X 的大多数值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP 客户端和服务器,使用 objectstreams 的 cmd 提示符 的相关文章

  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案

随机推荐