サーバ・クラスにデータを送信する際にソケットが常に近くにある理由: プログラムは、クライアントからのデータを受信してから返信しようとしています。サーバーは大丈夫ですが、問題はサーバーがクライアントに応答を送信するときです。クライアントは常に「ソケットが閉じる」と言います。私はsecketのcloseステートメントを削除しようとしますが、結果は同じです..出力には 'ソケットが閉じています'と表示されます。したがって、この問題を解決するために私を助けて...私はJavaのTCP
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
public class Nomor3Server {
public static final int SERVICE_PORT = 2020;
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(SERVICE_PORT);
System.out.println("DAytime service started");
for (;;) {
Socket nextClient = server.accept();
BufferedReader pesan = new BufferedReader(new InputStreamReader(nextClient.getInputStream()));
String messageIn = pesan.readLine();
System.out.println("Received request from "
+ nextClient.getInetAddress() + " : "
+ nextClient.getPort()
+ "\nIsi Pesan : " + messageIn);
String messageOut = "انا لا ادر";
switch (messageIn) {
case "saya":
messageOut = "أنا";
break;
case "kamu":
messageOut = "أنت";
break;
default:
break;
}
OutputStream out = nextClient.getOutputStream();
PrintStream pout = new PrintStream(out);
pout.print(messageOut);
out.flush();
out.close();
System.out.println("Message sent");
//nextClient.close();
}
} catch (BindException e) {
System.err.println("Server Already Running on port : " + SERVICE_PORT);
} catch (IOException ioe) {
System.err.println("error : " + ioe);
}
}
}
クライアントクラス下さい:返されたOutputStreamを閉じる
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
public class Nomor3Client {
public static final int SERVICE_PORT = 2020;
public static void main(String[] args) {
try {
String hostname = "localhost";
System.out.println("Connection Established");
//for (;;) {
System.out.println("Enter Your Message : ");
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
String pesan = read.readLine();
Socket daytime = new Socket(hostname, SERVICE_PORT);
if (pesan.equals("exit")) {
System.exit(0);
} else {
daytime.setSoTimeout(2000);
OutputStream out = daytime.getOutputStream();
PrintStream pout = new PrintStream(out);
pout.print(pesan);
out.flush();
out.close();
BufferedReader messageIn = new BufferedReader(new InputStreamReader(daytime.getInputStream()));
System.out.println("Respond : " + messageIn.readLine());
System.out.println("diterima");
}
daytime.close();
//}
} catch (IOException e) {
System.err.println("Error : " + e);
}
}
}
ループ –