我需要帮助。我正在制作一个示例队列系统。 当我尝试写入数据并将其存储到服务器时,服务器返回异常。 我也是套接字新手,因此我将感谢任何能够回答我的问题的人提供的帮助。
这是我的学生代码:
import java.lang.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class Student {
public static void main(String args[]) {
Scanner sc = new Scanner (System.in);
try {
Socket skt = new Socket("localhost", 1234);
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
System.out.println("Hello!");
System.out.print("Please enter name: ");
String name = sc.next();
System.out.print("Please enter ID Number: ");
String id = sc.next();
String student = name +" - "+ id;
out.print(student);
} catch(Exception e) {
System.out.println("Whoops! It didn't work.");
}
}
}
对于服务器:
import java.lang.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class Server {
public static void main(String args[]) {
Scanner sc = new Scanner (System.in);
ArrayList<String> collector = new ArrayList<String>();
try {
ServerSocket srvr = new ServerSocket(1234);
Socket skt = srvr.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
System.out.print(in.readLine());
String x = in.readLine();
collector.add(x);
}
catch(Exception e) {
System.out.print("Whoops! It didn't work!\n");
}
}
}
最佳答案
您需要在 PrintWriter 执行完成之前添加“out.close()”语句来正确关闭它。由于您没有这样做,因此客户端套接字突然关闭,并且您在服务器端收到异常。
理想情况下,这个 close() 应该在 finally block 内执行,以便确保它被执行。另外,正如另一个答案中指出的那样,您应该只读取一次,将其存储在变量中,然后对该值执行任何您需要的操作。
示例:
public class Server {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
ArrayList<String> collector = new ArrayList<String>();
try {
ServerSocket srvr = new ServerSocket(1234);
Socket skt = srvr.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
final String studentInfo = in.readLine();
System.out.print(studentInfo);
collector.add(studentInfo);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Whoops! It didn't work!");
}
}
}
学生:
public class Student {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
PrintWriter out = null;
try {
Socket skt = new Socket("localhost", 1234);
out = new PrintWriter(skt.getOutputStream(), true);
System.out.println("Hello!");
System.out.print("Please enter name: ");
String name = sc.next();
System.out.print("Please enter ID Number: ");
String id = sc.next();
String student = name + " - " + id;
out.print(student);
} catch (Exception e) {
System.out.println("Whoops! It didn't work.");
} finally {
if (out != null) {
try {
out.close();
} catch (Exception e) {
}
}
}
}
}
关于java - Java 编写客户端到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22221839/