【问题标题】:Problem Making a Chat Application Java Socket制作聊天应用程序 Java 套接字时出现问题
【发布时间】:2021-07-01 09:30:07
【问题描述】:

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

如您所见,在服务器控制台上,消息被打印了 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();
        }
        
            
        
    }
    
}

}

【问题讨论】:

    标签: java sockets server client


    【解决方案1】:

    在服务器代码更改

    Runnable recieve = new sender();
    

    Runnable recieve = new reciever();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      相关资源
      最近更新 更多