首页 > 解决方案 > 制作聊天应用程序 Java 套接字时出现问题

问题描述

您好,我已经开始学习套接字编程,并且我制作了一个聊天应用程序,但它不工作我不知道为什么,当服务器发送数据时客户端打印并接收它但是当客户端发送数据时它也没有在服务器中打印输出也很奇怪请帮忙谢谢如您所见,在服务器控制台上,该消息被打印了 2 次,为什么?

如您所见,在服务器控制台上,该消息被打印了 2 次,为什么?

服务器代码>>

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();
        }
        
            
        
    }
    
}

}

标签: javasocketsserverclient

解决方案


在服务器代码更改中

Runnable recieve = new sender();

Runnable recieve = new reciever();

推荐阅读