【问题标题】:Why does the TCPServer receive a string, though the TCPClient sends integers?为什么 TCP Server 收到一个字符串,通过 TCPClient 发送整数?
【发布时间】:2017-10-21 09:22:54
【问题描述】:

我用 Java 编写了一个 TCPClient,它将整数发送到 TCPServer。我包括了一个健全性检查,只是为了涵盖不发送整数而是发送其他内容的情况。如果一个人发送整数,那么就会期望其他人接收整数。

但是在下面的代码中,情况似乎并非如此:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;

class TCPClient {
    public static void main(String argv[]) throws Exception {

    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
    Socket clientSocket = new Socket("localhost", 6789);
    DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    int c = 0;
    while (c < 1000000) {
        System.out.println("Sent: " + c);
        outToServer.write(c);
        // Thread.sleep(1000);
        c++;

    }
    clientSocket.close();
    }
}



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

class TCPServer {
    public static void main(String argv[]) throws Exception {

    String reg = "\\d+";
    int c = 0;
    ServerSocket welcomeSocket = new ServerSocket(6789);

    Socket connectionSocket = welcomeSocket.accept();
    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

    while (true) {
        String s = inFromClient.readLine();

        if (s.matches(reg) == false) {
        throw new Exception(s + "is an invalid input! Expected one String of digits.");
        }

        int n = Integer.parseInt(s);
        if (c + 1 != n) {
        throw new Exception("Expected: " + (c + 1) + ", but got: " + n);
        }
        System.out.println("Received: " + c);
        c++;

    }
    }
}

我收到的字符串总是 8 个带框的问号。不幸的是,我不知道如何更好地描述它们。 现在出现了几个问题:为什么我会收到这个字符串?我希望程序能够顺利运行,无一例外,只看到数字。 如果可能,这个字符串是什么?它实际上是什么?
第三个相关问题:我怎样才能顺利解决这个问题?

【问题讨论】:

    标签: java sockets tcp tcpclient tcpserver


    【解决方案1】:

    您使用java.io.DataOutputStream 来编写ints,但您不使用java.io.DataInputStream 来读取它们。

    您确实使用了java.io.BufferedReader,该java.io.BufferedReader 旨在从字符输入流中读取文本。这就是您以字符串表示形式接收数据的原因。

    替换:

    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    

    作者:

    DataInputStream outToServer = new DataInputStream (connectionSocket.getInputStream());
    

    并使用DataInputStream#readInt() 方法读取int 值。

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 1970-01-01
      • 2019-10-02
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 2013-06-28
      相关资源
      最近更新 更多