客户端没有收到来自服务器的消息,而是在java中收到null

时间:2017-08-19 20:47:17

标签: 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);


    }

}

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

1 个答案:

答案 0 :(得分:2)

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

当你修复了:

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

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