【问题标题】:the server displays wrong data [closed]服务器显示错误的数据[关闭]
【发布时间】:2017-10-25 17:42:22
【问题描述】:

我正在编写客户端和服务器,问题是何时向服务器发送整数,我希望服务器显示它们我得到的数字不是我发送的数字,请注意其他字符串工作正常

你知道为什么会这样吗?

提前非常感谢! 客户

   Socket socket = new Socket("localhost",3333);

    OutputStreamWriter Output= new OutputStreamWriter(socket.getOutputStream());
    PrintWriter sender= new PrintWriter(Output);
    //creating the hotel by sending to the server the number of rooms
    System.out.println("please enter the number of the rooms");
    String roomsOfTheHotel=scanner.nextLine();
    sender.println(roomsOfTheHotel);
    //providing the information that needed to create a person class
    System.out.println("Enter the first name");
    String fname= scanner.nextLine();
    sender.println(fname);

    System.out.println("Enter the last name");
    String lname= scanner.nextLine();
    sender.println(lname);

    System.out.println("Enter the age");
    String  age= scanner.nextLine();
    sender.println(age);

    System.out.println("Enter the number of days");
    String  numberOfDays= scanner.nextLine();
    sender.println(numberOfDays);

    System.out.println("Enter the roomNumber");
    String roomNumber= scanner.nextLine();
    sender.println(roomNumber);

    Output.flush();

服务器 ServerSocket serverSocket=new ServerSocket(3333);

    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
    Date date = new Date();
    String todaysDate= dateFormat.format(date);

    System.out.println("System is waiting");

    Socket serverSideSocket= serverSocket.accept();


    InputStreamReader input=new  InputStreamReader(serverSideSocket.getInputStream());
    BufferedReader reader= new BufferedReader(input);
  int roomOfTheHotel= Integer.parseInt(String.valueOf(reader.read()));
    System.out.println(roomOfTheHotel);
    Hotel1 hotel = new Hotel1(roomOfTheHotel);

    String fname= reader.readLine();
    System.out.println(fname);

    String lname= reader.readLine();
    System.out.println(lname);

    int age = Integer.parseInt(String.valueOf(reader.read()));
    System.out.println(age);


    int numberOfDays = Integer.parseInt(String.valueOf(reader.read()));
    System.out.println(numberOfDays);

    int roomNumber = Integer.parseInt(String.valueOf(reader.read()));
    System.out.println(roomNumber);

示例

输入 输入年龄

27

输入天数

4

输入房间号

3

输出

97

115

115

【问题讨论】:

  • 您有任何输入/输出示例吗?你输入和输出什么样的数字? reader 是什么?
  • 对不起,我以为我复制了整个代码,但我没有阅读器是缓冲阅读器
  • 我将整数作为字符串发送并从服务器解析它们
  • 你检查过 BufferedReader 的 read() 方法了吗?我猜你用错了,readLine() 可能会有所帮助。

标签: java sockets server


【解决方案1】:

BufferedReader.read() 返回单个字符(作为 int)

要将其转换为正确的字母,请使用(char)reader.read(),然后可以将其放入字符串/读取到 int - 当前如果读取器读取“5”,it will give you the number value of it (53),然后将其转换为字符串("53"),并将其解析为 int(再次为 53)

使用BufferedReader.readLine()(返回一个字符串)来获取完整的输入行并相应地解析它可能更有用


int roomOfTheHotel= Integer.parseInt(String.valueOf(reader.read()));

应该是以下之一:

int roomOfTheHotel = Integer.parseInt(reader.readLine());

int roomOfTheHotel = Integer.parseInt("" + ((char)reader.read()));

int roomOfTheHotel = reader.read() - '0';

【讨论】:

  • 谢谢我把它改成 readLine 并且它工作了,但我仍然不明白为什么 read() 没有提供正确的整数
  • @TheDancerInTheRain 它可能确实返回了正确的整数,而不是您要查找的整数。您还应该接受答案,以便其他人知道问题已解决
  • 不,它应该显示与我发送到服务器的整数相同的整数,但我得到了其他数字。非常感谢您的帮助!
  • @TheDancerInTheRain 为什么你说它应该返回你输入的数字?数字被转换为字符串并通过套接字发送,然后您选择一次读取传输的字符串一个字节(即一次一个字符,以数字形式)。如果您发送 27,它会被转换为“27”,然后由.read() 读取为 50,在 ascii 中为 '2',再次调用 .read() 应返回 55,在 ascii 中为 '7'
  • 很好的解释,谢谢!弗拉克
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2019-03-30
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多