gpt4 book ai didi

Java IO 套接字不发送输出流

转载 作者:行者123 更新时间:2023-12-01 12:06:23 25 4
gpt4 key购买 nike

调试我的代码时,代码停在这里:

while (( msg = reader.readLine())  != null) {
writer.write("From server: " + msg);
}

我正在从客户端类发送输入,但我不知道我错在哪里,因为服务器从未收到消息。

这是我的整个服务器类:

    import java.io.*;
import java.net.*;


public class Server {

private BufferedReader reader;
private PrintWriter writer;
private int port;

public Server(int port)
{
this.port = port;
}

private String getSeverAddress() {
String host = null;
try {
InetAddress adr = InetAddress.getLocalHost();
host = adr.getHostAddress();

} catch (UnknownHostException e) {
e.printStackTrace();
}

return host;
}

public void startServer() {

print("Contact this sever on address: " + getSeverAddress() + " port: " + port);

ServerSocket ss = null;
Socket socket = null;

try {
ss = new ServerSocket(port);
socket = ss.accept();

reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);

String msg = null;

while (( msg = reader.readLine()) != null) {
writer.write("From server: " + msg);
print(msg);

if(msg.toLowerCase().equals("Bye")) {
print("Client left");
break;
}
}

ss.close();
socket.close();
reader.close();
writer.close();

} catch(SocketException e) {
e.printStackTrace();
} catch (IOException i ) {
i.printStackTrace();
return;
}
}

private void print(String msg) {
System.out.println(msg);
}

public static void main(String[] args) {

Server server = new Server(1111);
server.startServer();

}

}

这是客户端类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;


public class Client {

private Socket client;
private BufferedReader reader;
private PrintWriter writer;

public Client(Socket socket)
{
client = socket;

try{
reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
writer = new PrintWriter(client.getOutputStream(), true);

} catch (Exception e) {
e.printStackTrace();
}
}

public void writeToServer() {
print("Write message to server");

String msg = null;

try {
while((msg = reader.readLine()) != null) {
writer.write("From client: " + msg);
print(msg);

if(msg.toLowerCase().equals("quit")) {
break;
}
}

reader.close();
writer.close();

} catch (IOException e) {
e.printStackTrace();
}

}

private void print(String msg) {
System.out.println(msg);
}

public static void main(String[] args) {
Socket socket = null;

try {
socket = new Socket("localhost", 1111);

} catch (Exception e) {
e.printStackTrace();
}

Client client = new Client(socket);
client.writeToServer();
}

}

最佳答案

您的错误是服务器和客户端都在后台发送/接收消息而不打印任何内容。就像当你从客户端发送消息时,服务器收到它并再次写入客户端,它变成无限循环。

以下内容是错误的:

服务器.java

 try {
while (( msg = reader.readLine()) != null) {
print(msg);
if(msg.toLowerCase().equals("bye")) {
print("Client left");
break;
}
writer.write("From server: " + msg);
}

应该是循环的最后一个语句 writer.write("From client: "+ msg);if(msg.toLowerCase().equals("Bye")) 应该再见

Client.java

try {
while((msg = reader.readLine()) != null) {
print(msg);
if(msg.toLowerCase().equals("quit")) {
break;
}
writer.write("From client: " + msg);
}

它应该是循环的最后一个 writer.write("From client: "+ msg);

关于Java IO 套接字不发送输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27564457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com