java - 通过 java 中的套接字损坏的字符串

标签 java jakarta-ee

我在 Java 中通过套接字传输字符串时遇到问题。当我尝试从服务器接收数据时,数据已成功传输但已损坏。我不知道出了什么问题。

这是客户端代码:

public String getUserNameServerResult(String userNameParameter) {
    Socket socket;
    BufferedReader socketReader;
    PrintWriter socketWriter;
    String userNameResultParameter = null;
    try {
        socket = new Socket(HOST_NAME, PORT_NUMBER);
        socket.setSoTimeout(SERVER_REQUEST_TIMEOUT);
        socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        socketWriter = new PrintWriter(socket.getOutputStream());
        socketWriter.println(numberRequest);
        socketWriter.flush();
        socketWriter.println(userNameParameter);
        socketWriter.flush();
        userNameResultParameter = socketReader.readLine();
        socketReader.close();
        socketWriter.close();
        socket.close();
        System.out.println(userNameResultParameter);
    } catch(IOException ioEx) {
        ioEx.printStackTrace();
    }
        return userNameResultParameter;
}

从 readLine() 方法读取的行传输了损坏的字符串。

这是服务器端的一段代码:

public synchronized void run(){
    System.out.println(new Date().toString()+" :\nAccepted client: "
            +socket.getInetAddress()+":"+socket.getPort()+"\n");
    try {
        while(!isInterrupted()) {
            String numberRequest = socketReader.readLine();
            if(numberRequest == null) {
                break;
            }
            switch(numberRequest) {
                case "1":    // Determines if the user name exists in the Database.
                    String userName = socketReader.readLine(); 
                    boolean isUserName = ServerRequest.isUserNameExists(userName);
                    socketWriter.println(isUserName);
                    socketWriter.flush();
                    break;
                default: break;
            }
        }
    } catch(IOException ex) {
        System.err.println(ex.getMessage());
    }
}

“isUserName”变量已传输,但在客户端中已损坏。

你能帮忙解决这个问题吗? 谢谢!

最佳答案

isUserName 是一个 boolean 值。也许你的意思是 socketWriter.println(userName);

请使用下面的代码向我们展示损坏的字符串是什么样子的!

System.out.println(userNameResultParameter);
System.out.print("Chars:");
for (char c : userNameResultParameter.toCharArray())
    System.out.print(" 0x" + Integer.toHexString((int)c));

关于java - 通过 java 中的套接字损坏的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13202271/

相关文章:

java - 运行 AspectJ 导致 NoSuchMethodError : Aspect. aspectOf

java - 中断标志未设置

java - 将日期从 C# Web 方法格式化为 java android?

jakarta-ee - JUnit/Arquillian : Run managed Wildfly 8. 1 个容器

javax.naming.NameNotFoundException : jms

java - Android Studio - 添加 Google Play 服务/Android 支持后出现错误

java - Android - 创建自定义 xml 属性,如 onClick?

java - 与 WebSphere 和 Spring 集成进行 SSH 配置

java - 我如何在 JBoss 中创建全局上下文变量?

java - 我们如何为相同的异常提供不同的海关消息