创建聊天应用程序Java套接字时出现问题

创建聊天应用程序Java套接字时出现问题,java,sockets,server,client,Java,Sockets,Server,Client,您好,我已经开始学习socket编程,我制作了一个聊天应用程序,但它不工作我不知道为什么,当服务器发送数据时,客户端打印并接收数据,但当客户端发送数据时,它没有在服务器中打印,输出也很奇怪,请帮助谢谢 正如您所看到的,在服务器控制台上,消息被打印了两次为什么 服务器代码>> public class Server { public static Socket s; public static void main(String[] args) throws IOException {

您好,我已经开始学习socket编程,我制作了一个聊天应用程序,但它不工作我不知道为什么,当服务器发送数据时,客户端打印并接收数据,但当客户端发送数据时,它没有在服务器中打印,输出也很奇怪,请帮助谢谢

正如您所看到的,在服务器控制台上,消息被打印了两次为什么

服务器代码>>

public class Server {
public static Socket s;
public static void main(String[] args) throws IOException {
    
    System.out.println("Server has Started");
    ServerSocket ss = new ServerSocket(9999);
    
    System.out.println("Server is Waiting For Client Connection");
    s = ss.accept();
    
    System.out.println("Client connected");
    
    Runnable send = new sender();
    Runnable recieve = new sender();
    Thread sends = new Thread(send);
    Thread recieves = new Thread(recieve);
    sends.start();
    recieves.start();
    
    
    

    }
}

public class reciever implements Runnable{

@Override
public void run() {
    
    while(true) {
        try {
            
            BufferedReader br = new BufferedReader(new InputStreamReader(Server.s.getInputStream()));
            String message = br.readLine();
            
            System.out.println("Client:" + message);
        
        
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
}

}

public class sender implements Runnable{

@Override
public void run() {
    
    
    while(true) {
    
    try {
        Scanner scan = new Scanner(System.in);
        System.out.print("Message: ");
        String message = scan.nextLine();   
        
        OutputStreamWriter os = new OutputStreamWriter(Server.s.getOutputStream());
        PrintWriter out = new PrintWriter(os);
        out.println(message);
        os.flush();
    
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    
    }
}

}
客户端代码>>

public class Client {

public static Socket s ;

public static void main(String[] args) throws Exception {
    String ip = "localhost";
    int port = 9999;
    s = new Socket(ip, port);
    
    Runnable send = new sender();
    Runnable recieve = new reciever();
    Thread sends = new Thread(send);
    Thread recieves = new Thread(recieve);
    sends.start();
    recieves.start();
}

}

public class reciever implements Runnable{

@Override
public void run() {
    while(true) {
    try {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(Client.s.getInputStream()));
        String message = br.readLine();
        
        System.out.println("Server:" + message);
    
    
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }
}

}

public class sender implements Runnable {

@Override
public void run() {
    
    while(true) {
        
        try {
            Scanner scan = new Scanner(System.in);
            
            System.out.print("Message: ");
            String message = scan.nextLine();
            
            OutputStreamWriter os = new OutputStreamWriter(Client.s.getOutputStream());
            
            PrintWriter out = new PrintWriter(os);
            out.println(message);
            os.flush();
        
        
        
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
            
        
    }
    
}

}
服务器内代码更改

Runnable recieve = new sender();

Runnable recieve = new reciever();