2015-12-03 2 views
0

Я новичок в программировании, поэтому надеюсь, что вы поможете мне решить мою проблему. Я пишу программу чата на основе UDP, у которой есть сервер и клиентский класс, и нет никаких признаков какой-либо проблемы, но когда я пытаюсь запустить программу, она бросает «java.net.BindException: Address уже используется: Невозможно привязать»общественный класс Сервер расширяет JFrame реализует ActionListener {Ошибка программы чата UDP?

Сервер:

public class Server extends JFrame implements ActionListener { 

byte[] serverBuffer,clientBuffer; 
DatagramSocket client,server; 
JTextField textField; 
JTextArea textArea; 
JButton button; 


public Server(){ 

    this.setSize(400,400); 
    this.setTitle("Server"); 
    textField = new JTextField(100); 
    textField.setBackground(Color.white); 
    textField.setForeground(Color.black); 
    this.add(textField,BorderLayout.NORTH); 
    textArea = new JTextArea(); 
    this.add(textArea,BorderLayout.CENTER); 
    textArea.setBackground(Color.white); 
    textArea.setForeground(Color.green); 
    button = new JButton("Send Message"); 
    this.add(button,BorderLayout.SOUTH); 
    button.addActionListener(this); 
    this.setVisible(true); 

serverBuffer = new byte[1024]; 
clientBuffer = new byte[1024]; 

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    try{ 
     client = new DatagramSocket(); 
     server = new DatagramSocket(9999); 

     while(true){ 
      DatagramPacket dataPacket = new DatagramPacket(clientBuffer,clientBuffer.length); 
      server.receive(dataPacket); 
      String message = new String(dataPacket.getData()); 
      textArea.append("\nClient's message:" + message); 

     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

} 

@Override 
public void actionPerformed(ActionEvent e) { 

    try{ 
     if(e.getActionCommand()=="Send Message"){ 
     String message = textField.getText(); 
     serverBuffer = message.getBytes(); 
     DatagramPacket sendPack = new DatagramPacket(serverBuffer,serverBuffer.length,InetAddress.getLocalHost(),9998); 
     client.send(sendPack); 
     textArea.append("\nMyself: " + message); 
     textField.setText(" "); 

    } 
    }catch(Exception a){ 
     a.printStackTrace(); 
    } 

} 

public static void main(String[] args){ 
    Server server = new Server(); 
} 

} 

Клиент:

public class Client extends JFrame implements ActionListener { 

byte[] clientBuffer,serverBuffer; 
DatagramSocket server,client; 
String sendData; 
JTextField textField; 
JTextArea textArea; 
JButton button; 


public Client(){ 

    this.setSize(400,400); 
    this.setTitle("Client"); 
    textField = new JTextField(100); 
    textField.setBackground(Color.white); 
    textField.setForeground(Color.black); 
    this.add(textField,BorderLayout.EAST); 
    textArea = new JTextArea(); 
    this.add(textArea,BorderLayout.CENTER); 
    textArea.setBackground(Color.white); 
    textArea.setForeground(Color.white); 
    button = new JButton("Send Message"); 
    this.add(button,BorderLayout.NORTH); 
    button.addActionListener(this); 
    this.setVisible(true); 

    serverBuffer = new byte[1024]; 
    clientBuffer = new byte[1024]; 

    setDefaultCloseOperation(EXIT_ON_CLOSE); 


    try{ 
     client = new DatagramSocket(); 
     server = new DatagramSocket(9998); 
    while(true){ 
     DatagramPacket dataPacket = new DatagramPacket(clientBuffer,clientBuffer.length); 
     server.receive(dataPacket); 
     String message = new String(dataPacket.getData()); 
     textArea.append("\nServer: " + message); 

    } 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    } 

@Override 
public void actionPerformed(ActionEvent e) { 
    try{ 
     if(e.getActionCommand()=="Send Message"){ 

     String message = textField.getText(); 
     clientBuffer = message.getBytes(); 
     DatagramPacket sendPacket = new DatagramPacket(serverBuffer,serverBuffer.length,InetAddress.getLocalHost(),9999); 
     client.send(sendPacket); 
     textArea.append("\nClient: " + message); 
     textField.setText(""); 
    } 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
} 

public static void main(String[] args){ 
    Client obj = new Client(); 
    } 


    } 
+1

Так что же еще работает на этих портах? –

+1

Убедитесь, что вы закрыли/освободили ресурсы, когда закончите с ними. – Alp

+0

Почему у вас есть клиент и серверный сокет каждый в клиентском и серверном приложении? И посмотрите, что вы закрыли предыдущие окна. На каждый порт может быть только одно приложение. – zapl

ответ

0

вы другой серверный процесс? В этом случае вам необходимо завершить этот процесс, а затем запустить его снова.

Ошибка означает, что сокет, который вы используете, уже используется, скорее всего, будет другим процессом Java. Переход в диспетчер задач (если вы на компьютере) должен помочь увидеть, какие другие процессы выполняются в настоящее время.

Смежные вопросы