这是我的简单服务器程序的代码,客户端将连接然后创建一个person对象,即使没有客户端尝试连接仍然存在错误。附:我如何printStackTrace(),如果我在第二个catch语句中取消注释服务器中的行(在while循环中),我得到红色写入而不是堆栈跟踪。
'import java.net.ServerSocket;
import java.net.Socket;
public class Test {
ServerSocket ss;
int id;
public Test(int portNo){
id = 0;
Listen(portNo);
}
private void Listen(int portNo){
try{
ss = new ServerSocket(portNo);
}
catch(Exception e){
System.out.println(e.getMessage());
}
while(true){
try{
id++;
new Thread(new Person(ss.accept(),id)).start();
}
catch(Exception e){
System.out.println("2 " + e.getMessage());
//e.printStackTrace();
}
}
}
}
每当我运行这个时,我总会得到错误" 2 null"重复。
人员类:
import java.net.Socket;
public class Person implements Runnable{
int id;
public Person(Socket s, int id){
this.id = id;
}
public void run(){
System.out.println(id + " Connected to server");
}
}
客户代码:
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
public class test1{
String serverIp;
Boolean connected;
InetAddress IP;
Socket clientSocket;
Integer clientID;
int ssPortNo;
public test1(){
System.out.println("Enter IP : ");
Scanner sc = new Scanner(System.in);
String ip = sc.next();
System.out.println("Enter port : ");
String port = sc.next();
setupConnection(ip, port);
}
private void setupConnection(String serverIP, String port) {
int portInt = Integer.parseInt(port);
serverIp = serverIP;
try {
connected = true;
IP = InetAddress.getByName(serverIP);
clientSocket = new Socket(serverIP, portInt);
System.out.println("Connecting");
}
catch(Exception e){
System.out.println("1 " + e.getMessage());
}
}
}
答案 0 :(得分:0)
问题是如果出现异常,你什么都不做。
每当我运行这个时,我总会得到错误" 2 null"重复。
这是因为(我认为)你已经拥有一个监听特定端口的服务器,并且你在同一个端口运行服务器。在这种情况下抛出一个异常(Address已在使用中)。要快速验证,请尝试更改服务器侦听的端口。
修改强>
我认为由于某种原因,您的ServerSocket为null。你能在服务器中添加它并显示输出吗?
if(ss!=null){
while(true){
Socket socket = null;
try{
id++;
System.out.println("Server wait at 9094");
socket = ss.accept();
new Thread(new Person(socket,id)).start();
socket.close();
}
catch(Exception e){
System.out.println("2 " + e);
}
}
}
else
{
System.out.print("the ServerSocket is NULL");
}