java - Java 中的基本 Socket 编程

标签 java sockets

我正在尝试用 Java 创建一个非常简单的 Socket/ServerSocket 程序。下面列出了我的两个类,它们都在同一台机器上运行。问题是,连接似乎建立得很好,但是当我尝试从客户端向服务器写入套接字时,似乎没有发生任何事情。服务器永远不会从 in.readLine() 返回,并且程序会停止。我不明白为什么会发生这种情况。

这是我的类(class):

TheServer.java:

public class TheServer {
  public static void main(String[] args) {
    BufferedReader in = null;
    PrintWriter out = null;

    try {
        ServerSocket serv = new ServerSocket(2255);
        Socket sock = serv.accept();
        in = new BufferedReader(
                new InputStreamReader(sock.getInputStream()));
        out = new PrintWriter(sock.getOutputStream());

    } catch (IOException e) {
        e.printStackTrace();
    }

    System.out.println("Connection established by Server");

    try {
        String line;
        while ((line = in.readLine()) != "Bye") {
            System.out.println(line + "Received");
            out.println(line.toUpperCase());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

  }
}

TheClient.java:

public class theClient {
  public static void main(String[] args) {
    BufferedReader in = null;
    PrintWriter out = null;

    try {
        Socket sock = new Socket("localhost", 2255);
        in = new BufferedReader(
                new InputStreamReader(sock.getInputStream()));
        out = new PrintWriter(sock.getOutputStream());
    } catch (Exception e) {
        e.printStackTrace();
    }

    System.out.println("Connection established by Client");

    try {
        while (true) {
            BufferedReader read = new BufferedReader(new InputStreamReader(
                    System.in));
            String line = read.readLine();
            out.println(line.trim());
            System.out.println(in.readLine().trim());

            if (line == "Bye")
                break;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

  }
}

最佳答案

对于 PrintWriter 对象,每次写入尝试后,

    obj.flush();

关于java - Java 中的基本 Socket 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820635/

相关文章:

java - Log4j 在文件开头记录一些二进制信息

java - 如何在java中的套接字之间传递/写入哈希表作为对象

c++ - 我应该使用 ace_select_reactor 还是 ace_dev_poll_reactor

用于字符串匹配的Java数据结构

java - java中的映射

python - 断开连接后在python中重新连接到PiCamera流

jquery - 从另一个js文件调用 channel 连接函数

c# - NetworkStream.Write 异步问题

java - OSGi 中的 JCE 安全提供者

java - 当 pdf 生成失败时,向 portlet 资源响应提供错误页面