You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac环境下简单TCP客户端-服务器认证功能异常问题求助

TCP客户端/服务器登录验证问题修复

问题根源

客户端代码存在逻辑错误:将输入流读取的字节数与字符串"ok"直接比较,导致无论服务器返回什么结果,都会判定为登录失败。

原客户端代码错误行:

if("ok".equals(len))

len是inputStream.read(bytes)返回的整数类型字节长度,和字符串"ok"类型不匹配,永远不可能相等。

修复方案

将读取到的字节数组转换为字符串后再进行结果判断,同时补充流刷新操作确保数据及时发送:

修正后的TcpClient.java代码

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class TcpClient {
    public static void main(String[] args) throws IOException {
        while(true){
            Scanner scanner = new Scanner(System.in);
            System.out.println("Please enter username: ");
            String username = scanner.nextLine();
            System.out.println("Please enter password: ");
            String pwd = scanner.nextLine();
            Socket socket = new Socket("127.0.0.1", 8080);
            OutputStream outputStream = socket.getOutputStream();
            String text ="userName="+username+"&userPwd="+pwd;
            outputStream.write(text.getBytes(StandardCharsets.UTF_8));
            // 刷新输出流,确保数据立即发送至服务器
            outputStream.flush();
            
            InputStream inputStream = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int len = inputStream.read(bytes);
            // 将字节数组转换为字符串
            String result = new String(bytes, 0, len, StandardCharsets.UTF_8);
            if("ok".equals(result)){
                System.out.println("login successfully");
            }else{
                System.out.println("failed to login");
            }
            // 依次关闭所有资源
            inputStream.close();
            outputStream.close();
            socket.close();
        }
    }
}

额外优化建议

  • 服务器代码需补充关闭OutputStream,避免资源泄漏;
  • 服务器添加字符串分割的异常处理,防止客户端发送格式错误数据时抛出数组越界异常;
  • 统一使用指定字符集(如UTF-8)转换字节与字符串,避免跨平台编码差异。

内容的提问来源于stack exchange,提问作者dean7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:15:34