Oi, estou implementando um chat cliente / cliente usando sockets, só que o código que achei na internet que se parece com o que eu preciso utiliza multicast, e eu preciso usar unicast. Não estou conseguindo mudar de multicast para unicast, gostaria muito da ajuda de vocês. Agradeço desde já.
package org.segurança;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
class Receiver implements Runnable
{
Thread activity = new Thread(this);
MulticastSocket so;
JTextArea txt;
Receiver(MulticastSocket sock, JTextArea txtAr)
{
so = sock;
txt = txtAr;
activity.start();
}
public void run()
{
byte[] data = new byte[1024];
while(true)
try
{
DatagramPacket packet = new DatagramPacket(data,data.length);
so.receive(packet);
String mess = new String(data,0,packet.getLength());
txt.append(mess+ "\n");
}
catch(IOException e)
{
break;
}
}
}
[code]package org.segurança;
import javax.swing.;
import java.awt.;
import java.awt.event.;
import java.net.;
import java.io.*;
public class JChat extends JFrame implements ActionListener
{
String name;
InetAddress iadr;
int port;
MulticastSocket so;
JTextArea txt = new JTextArea();
JScrollPane sp = new JScrollPane(txt);
JTextField write = new JTextField();
JButton quit = new JButton(“Go Offline”);
public JChat(String username, String groupAdr, int portNr) throws IOException
{
name = username;
iadr = InetAddress.getByName(groupAdr);
port = portNr;
so = new MulticastSocket(port);
so.joinGroup(iadr);
new Receiver(so,txt);
sendMess("Online");
setTitle("Chatting with "+ name);
txt.setEditable(true);
add(quit,BorderLayout.NORTH);
add(sp,BorderLayout.CENTER);
add(write,BorderLayout.SOUTH);
quit.addActionListener(this);
write.addActionListener(this);
setSize(400,250);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void sendMess(String string)
{
// TODO Auto-generated method stub
}
public void sendMess1(String s)
{
byte[] data = (name + ": " + s).getBytes();
DatagramPacket packet = new DatagramPacket(data,data.length,iadr,port);
try
{
so.send(packet);
}
catch(IOException ie)
{
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null, "Data overflow !");
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==write)
{
sendMess(write.getText());
write.setText("");
}
else if(e.getSource()==quit)
{
sendMess("Offline");
try
{
so.leaveGroup(iadr);
}
catch(IOException ie)
{
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null, "Data overflow, connection error !");
}
so.close();
dispose();
System.exit(0);
}
}
public static void main(String[] arg) throws IOException
{
String in = JOptionPane.showInputDialog(null,"What's your name?");
if(arg.length>0)
in = arg[0];
new JChat(in,"238.4.68.211",9876);
}
}
[/code]
e quando eu coloco o endereço de alguém para que eu possa conversar no chat na linha new JChat(in, “”, 9876); resulta no seguinte erro:
[quote]Exception in thread “main” java.net.SocketException: Not a multicast address
at java.net.MulticastSocket.joinGroup(Unknown Source)
at org.segurança.JChat.(JChat.java:24)
at org.segurança.JChat.main(JChat.java:86)
[/quote]