Problema com socket unicast e multicast

0 respostas
Luila_Moraes_de_Oliv

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

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:

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)

Criado 30 de setembro de 2009
Respostas 0
Participantes 1