java - 客户端没有从服务器接收消息,而是在 java 中接收 null

标签 java sockets network-programming

我正在尝试用java学习网络编程,到目前为止我已经编写了2个代码,一个用于客户端,一个用于服务器端。首先我运行 serverCode,然后运行客户端代码,但是客户端在其末尾收到 null。

服务器端代码:

import java.net.*;
import java.io.*;
/**
 *
 * @author saksham
 */
public class Chatserver {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        ServerSocket serverSocket=new ServerSocket(6966);
        while (true){
            Socket request=serverSocket.accept();
            System.out.println("Connection established");
            PrintWriter pw=new PrintWriter(request.getOutputStream());
           // InputStreamReader ir=new InputStreamReader(request.getInputStream());
            //BufferedReader bf=new BufferedReader(ir);
            //String msg=bf.readLine();
            pw.println("you sent me the message:");
            request.close();


        }

    }

}

客户端代码:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.io.*;
import java.util.Scanner;

/**
 *
 * @author saksham
 */
public class Chat {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        Socket socket=new Socket("127.0.0.1",6966);
       // PrintWriter pw=new PrintWriter(socket.getOutputStream());
        //System.out.println("\nEnter a message:->");
        //Scanner sc=new Scanner(System.in);
        //pw.println(sc.next());
        InputStreamReader ir=new InputStreamReader(socket.getInputStream());
        BufferedReader br=new BufferedReader(ir);
        String rcvd=br.readLine();
        socket.close();
        System.out.println(rcvd);
        rcvd=br.readLine();
        System.out.println(rcvd);


    }

}

我非常清楚我没有使用良好的编码风格,它只是一个测试代码,因为我现在专注于学习。

最佳答案

您应该关闭pw,而不是套接字。目前,您的输出仍然缓冲在 PrintWriter 中,并且根本不会发送。

当你解决这个问题后:

  1. 您正在发送一行,然后关闭套接字。

  2. 您正在阅读两行。第一个 readLine() 将返回您发送的行。第二个 readLine() 将返回 null,表示流结束。

关于java - 客户端没有从服务器接收消息,而是在 java 中接收 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45776144/

相关文章:

c++ - Qt TCP/IP 通信只能在本地工作,但在网络中会丢失

java - foreach 循环内的 foreach 循环 (Java)

java - 防止IE缓存

c - 我在 UDP 套接字上设置了 SO_RCVLOWAT(接收低水位线)选项,但它不起作用

c - 使用 select() 的非阻塞 I/O

c++ - 为什么 ASIO async write 网络第二次发送数据失败?

c++ - 需要一个散列函数来从 ipv6 16 字节地址和 TCP 2 字节端口号中创建 32 位值

java - 重写所有子类 IntelliJ 中的构造函数

java - 在 JSF 中生成自己的 session ID

java - 如何在 java Socket/SSLSocket 上设置读取超时?