我正在尝试学习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);
}
}
我非常清楚我没有使用良好的编码风格只是一个测试代码,因为我现在专注于学习。
答案 0 :(得分:2)
你应该关闭pw
,而不是套接字。目前,您的输出仍然在PrintWriter
缓冲,并且永远不会被发送。
当你修复了:
您正在发送一行,然后关闭套接字。
您正在阅读两行。第一个readLine()
将返回您发送的行。第二个readLine()
将返回null,表示流的结束。