我正在编写一个简单的客户端-服务器程序,我的问题是服务器不等待客户端的回答,这会导致IOException
. 服务器尝试执行时发生异常
line = bufferStringFromClientReader.readLine();
我究竟做错了什么?
服务器:
import java.io.*;
import java.net.*;
public class Server {
private final static String filePath = "dataFile.txt";
public static void main(String[] arg) {
ServerSocket serverSocket = null;
Socket serverConnection = null;
OutputStream outServerStream = null;
InputStream inServerStream = null;
PrintWriter printWriterDataSender = null;
BufferedReader bufferDataFromFileReader = null;
BufferedReader bufferStringFromClientReader = null;
BufferedWriter bufferedStringToFileWriter = null;
String line;
try {
serverSocket = new ServerSocket(8868);
} catch (IOException e) {
throw new RuntimeException("Nieobsłużony wyjątek - nie można utowrzyć gniazda serwera");
}
try {
serverConnection = serverSocket.accept();
} catch (IOException e) {
throw new RuntimeException("Nieobsłużony wyjątek - nie można nawiązać połączenia z klientem");
}
try {
inServerStream = serverConnection.getInputStream();
} catch (IOException e) {
throw new RuntimeException("Nieobsłużony wyjątek - nie można pobrać strumienia wejścia");
}
try {
outServerStream = serverConnection.getOutputStream();
bufferDataFromFileReader = new BufferedReader(new FileReader(filePath));
bufferedStringToFileWriter = new BufferedWriter(new FileWriter(filePath, true));
} catch (IOException e) {
throw new RuntimeException("Nieobsłużony wyjątek - nie można pobrać strumienia wyjścia");
}
while (true) {
try {
printWriterDataSender = new PrintWriter(outServerStream);
line = bufferDataFromFileReader.readLine();
printWriterDataSender.println(line);
printWriterDataSender.flush();
printWriterDataSender.close();;
bufferStringFromClientReader = new BufferedReader(new InputStreamReader(inServerStream));
System.out.println("get answer from client");
line = bufferStringFromClientReader.readLine();
bufferedStringToFileWriter.write(line);
bufferedStringToFileWriter.close();
} catch (Exception e) {
System.out.println("utracono polaczenie");
try {
serverConnection = serverSocket.accept();
} catch (IOException e1) {
throw new RuntimeException("Nieobsłużony wyjątek - nie można nawiązać połączenia z klientem");
}
try {
inServerStream = serverConnection.getInputStream();
} catch (IOException e2) {
throw new RuntimeException("Nieobsłużony wyjątek - nie można pobrać strumienia wejścia");
}
try {
outServerStream = serverConnection.getOutputStream();
} catch (IOException e3) {
throw new RuntimeException("Nieobsłużony wyjątek - nie można pobrać strumienia wyjścia");
}
}
}
}}
客户:
import java.awt.EventQueue;
import java.io.*;
import java.util.*;
import java.net.*;
import javax.swing.*;
public class Client {
public static void main(String[] args)
{
Socket clientSocket = null;
InputStream clientInputStream = null;
OutputStream clientOutputStream = null;
BufferedReader clientBufferReader = null;
try
{
clientSocket = new Socket("localhost", 8868);
}
catch(UnknownHostException e)
{
throw new RuntimeException("Nieobsłużony wyjątek - nieznana nazwa hosta");
}
catch(IOException e)
{
throw new RuntimeException("Nieobsłużony wyjątek - nie można utowrzyć gniazda klienta");
}
try
{
clientInputStream = clientSocket.getInputStream();
}
catch(IOException e)
{
throw new RuntimeException("Nieobsłużony wyjątek - nie można pobrać strumienia wejścia");
}
try
{
clientOutputStream = clientSocket.getOutputStream();
}
catch(IOException e)
{
throw new RuntimeException("Nieobsłużony wyjątek - nie można pobrać strumienia wyjścia");
}
try
{
clientBufferReader = new BufferedReader(new InputStreamReader(clientInputStream));
}
catch(Exception e)
{
throw new RuntimeException("Nieobsłużony wyjątek - nie można utworzyć bufora odczytu danych od serwera");
}
try
{
String tmpString = clientBufferReader.readLine();
System.out.println(tmpString);
PrintWriter answer = new PrintWriter(clientOutputStream);
answer.println("ans \n");
answer.close();
}
catch(Exception e)
{
throw new RuntimeException("Nieobsłużony wyjątek - odpowiedz");
}
}