Я новичок в программировании, поэтому надеюсь, что вы поможете мне решить мою проблему. Я пишу программу чата на основе 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();
}
}
Так что же еще работает на этих портах? –
Убедитесь, что вы закрыли/освободили ресурсы, когда закончите с ними. – Alp
Почему у вас есть клиент и серверный сокет каждый в клиентском и серверном приложении? И посмотрите, что вы закрыли предыдущие окна. На каждый порт может быть только одно приложение. – zapl