问题:
客户端没有收到任何消息。
这是客户端和服务器的完整代码:
CLIENT
public class Client extends Socket{
public Client(String hostName, int port) throws UnknownHostException, IOException {
super(hostName,port);
BufferedReader in = new BufferedReader(new InputStreamReader(getInputStream()));
while(true) {
String line = in.readLine();
System.out.println("Text received: " + line);
}
}
SERVER
public final class Server extends ServerSocket{
public Server(int port) throws IOException {
super(port);
System.out.println("Server waiting for client 1");
Socket client1 = accept();
PrintWriter writer = new PrintWriter(client1.getOutputStream(), true);
writer.write("Hello user 1");
System.out.println("Server waiting for client 2");
Socket client2 = accept();
PrintWriter writer2 = new PrintWriter(client2.getOutputStream(), true);
writer2.write("Hello user 2");
System.out.println("Clients connected");
}
- 我启动服务器监听4444端口
- 我使用主机名“localhost”和端口 4444 启动客户端
您必须在消息末尾包含换行符,如果连接没有立即更改,还必须刷新 PrintWriter,强制自动刷新:
writer.write("Hello user 1\n");
writer.flush();
EDIT:
可以使用构造函数在 PrintWriter 上启用自动刷新new PrintWriter(someOutputStream, true)
但是,正如文档中所解释的:
如果启用自动刷新,则仅当调用 println、printf 或 format 方法之一时才执行,而不是每当输出换行符时执行
这意味着即使使用自动刷新,PrintWriter 仍然需要在之后手动刷新write
被调用,并且换行符(\n
) 仍然必须包含在字符串的末尾。
EDIT 2:
这是一个功能齐全的客户端/服务器应用程序的小示例:
Client:
public static void main(String[] args){
try{
Socket socket = new Socket(HOST_ADDRESS, PORT);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(bufferedReader.readLine());
bufferedReader.close();
socket.close();
}catch(IOException e){}
}
Server:
public static void main(String[] args){
try{
ServerSocket serverSocket = new ServerSocket(PORT);
Socket socket = serverSocket.accept();
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.write("Hello user!\n");
printWriter.flush();
printWriter.close();
socket.close();
serverSocket.close();
}catch(IOException e){}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)