客户端未从服务器接收消息,而是在java中接收null
到目前为止,我已经写了两个代码,一个用于客户端,一个用于服务器端。首先,我运行serverCode,然后运行客户机代码,但客户机端接收到null 服务器端代码:客户端未从服务器接收消息,而是在java中接收null,java,sockets,network-programming,Java,Sockets,Network Programming,到目前为止,我已经写了两个代码,一个用于客户端,一个用于服务器端。首先,我运行serverCode,然后运行客户机代码,但客户机端接收到null 服务器端代码: import java.net.*; import java.io.*; /** * * @author saksham */ public class Chatserver { /** * @param args the command line arguments */ public st
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
中,根本不会被发送
当您修复该问题时:
readLine()
将返回您发送的行。第二个readLine()
将返回null,表示流结束您应该关闭
pw
,而不是插座。目前,您的输出仍然被缓冲在PrintWriter
中,根本不会被发送
当您修复该问题时:
readLine()
将返回您发送的行。第二个readLine()
将返回null,表示流结束在完成读取之前,您可能不想关闭套接字。至少应该打印一条消息,对吗?您需要关闭或至少刷新,在关闭套接字之前关闭ChatServer类中的PrintWriter。在完成对套接字的读取之前,您可能不想关闭该套接字。至少应该打印一条消息,对吗?您需要在关闭套接字之前关闭或至少刷新ChatServer类中的PrintWriter。我添加了两行代码,如您所述,它们是pw.flush()关闭在关闭套接字之前,我得到了两次空值,虽然它应该只有一次空值,但是当我删除关闭套接字的行时,问题得到了解决。对此有什么解释吗?你没有按照我说的或你声称的做。我告诉过你关闭
pw
而不是套接字。关闭pw
关闭套接字。如果你在pw
之后关闭套接字,它会工作。如果您在pw
之前关闭套接字,则无论是刷新还是关闭pw
都不可能有任何效果。因此,如果它不工作,您首先关闭套接字。注意,关闭之前的刷新是多余的。我添加了两行代码,正如您提到的,它们是pw.flush()关闭在关闭套接字之前,我得到了两次空值,虽然它应该只有一次空值,但是当我删除关闭套接字的行时,问题得到了解决。对此有什么解释吗?你没有按照我说的或你声称的做。我告诉过你关闭pw
而不是套接字。关闭pw
关闭套接字。如果你在pw
之后关闭插座,它会工作。如果在pw
之前关闭插座,则无论是刷新还是关闭pw
都不可能有任何效果。因此,如果它不工作,则先关闭插座。注意,关闭前刷新是多余的。