简体   繁体   English

Java中的基本Socket编程

[英]basic Socket programming in Java

I am attempting to create a very simple Socket / ServerSocket program in Java.我正在尝试用 Java 创建一个非常简单的Socket / ServerSocket程序。 My two classes are listed below, both of which run on the same machine.下面列出了我的两个类,它们都在同一台机器上运行。 The problem is, the connection seems to be established just fine, but when I attempt to write over the socket from the client to the server, nothing seems to happen.问题是,连接似乎建立得很好,但是当我尝试将套接字从客户端写入服务器时,似乎什么也没发生。 The server never returns from in.readLine() , and the program comes to a halt.服务器永远不会从in.readLine()返回,并且程序会停止。 I cannot figure out why this is happening.我无法弄清楚为什么会这样。

Here are my classes:这是我的课程:

TheServer.java:服务器.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:客户端.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();

You are not flushing the outputstream, do printwriter_obj.flush();您没有刷新输出流,请执行 printwriter_obj.flush printwriter_obj.flush();

You have to do this after sending each and every message.您必须在发送每条消息后执行此操作。 I would suggest to add auto flush parameter to the Printwriter,like this:我建议将自动刷新参数添加到 Printwriter,如下所示:

PrintWriter out=new PrintWriter(OutputStream:socket.getOutputStream(),AutoFlush:true);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM