在UDP通信中,windows端能接收数据包但是无法发送数据包的可能原因解决方法

在UDP通信中,windows端能接收数据包但是无法发送数据包的可能原因我写了一个UDP多人聊天的程序,程序如下:(

在UDP通信中,windows端能接收数据包但是无法发送数据包的可能原因
我写了一个UDP多人聊天的程序,程序如下:(之所以分linux端和windows端是由于编码问题,如有更好的解决办法,希望指点一下)
linux端

Java code
import java.net.*;import java.util.*;/**  *利用MulticastSocket实现多人聊天---linux端  */public class MainClass5 extends Thread {        private int  port=8888;    private InetAddress addr=null;    private DatagramPacket inPacket=null;//接收数据包    private DatagramPacket outPacket=null;//发送数据包    private  MulticastSocket socket=null;        private Scanner sc=null;    private byte[] inBuffer=null;    private byte[] outBuffer=null;    /**      *初始化实例 ,      */    public void  init()    {        try        {        addr=InetAddress.getByName("230.0.0.1");        socket=new MulticastSocket(port);                socket.joinGroup(addr);            socket.setNetworkInterface(NetworkInterface.getByName("wlan0"));//设置网络接口后同一台机器上多个客户端间不能通信,类似与一台机器不能登录多个帐号            System.out.println(socket.getNetworkInterface());            socket.setLoopbackMode(true);        sc=new Scanner(System.in);        inBuffer=new byte[1024];        inPacket =new DatagramPacket(inBuffer,inBuffer.length);//接收数据包        new Thread(this).start();//启动run()线程 如果是new MainClass5().start()则会抛出java.lang.NullPointerException        String line;        while(true)        {            line=sc.nextLine();            outBuffer=line.getBytes();            outPacket=new DatagramPacket(outBuffer,outBuffer.length,addr,port);            socket.send(outPacket);            if(line.equals("quit"))                break;        }        socket.close();        }        catch(Exception e)        {            System.out.println(e);        }                            }    /**      *实现socket 接收广播数据并且打印到屏幕      */    public void run()    {                try        {        while(true)        {                    socket.receive(inPacket);                System.out.println("Form "+inPacket.getAddress()+" "+new String(inPacket.getData(),0,inPacket.getLength(),"gb2312"));        }        }        catch(Exception e)        {            e.printStackTrace();        }    }    /**      *main entru      */    public static void main(String[] args)    {        new MainClass5().init();    }}

windows端:
Java code
import java.net.*;import java.util.*;/**  *利用MulticastSocket实现多人聊天--windows端  */public class MainClass5 extends Thread {        private int  port=8888;    private InetAddress addr=null;    private DatagramPacket inPacket=null;//接收数据包    private DatagramPacket outPacket=null;//发送数据包    private  MulticastSocket socket=null;        private Scanner sc=null;    private byte[] inBuffer=null;    private byte[] outBuffer=null;    /**      *初始化实例       */    public void  init()    {        try        {        addr=InetAddress.getByName("230.0.0.1");        socket=new MulticastSocket(port);                socket.joinGroup(addr);            socket.setNetworkInterface(NetworkInterface.getByName("eth0"));            System.out.println("正在使用的网络接口 "+socket.getNetworkInterface());            socket.setLoopbackMode(true);        sc=new Scanner(System.in);        inBuffer=new byte[1024];        inPacket =new DatagramPacket(inBuffer,inBuffer.length);//接收数据包        new Thread(this).start();//启动run()线程 如果是new MainClass5().start()则会抛出java.lang.NullPointerException        String line;        while(true)        {            line=sc.nextLine();            outBuffer=line.getBytes();            outPacket=new DatagramPacket(outBuffer,outBuffer.length,addr,port);            socket.send(outPacket);            if(line.equals("quit"))                break;        }        socket.close();        }        catch(Exception e)        {            System.out.println(e);        }                            }    /**      *实现socket 接收广播数据并且打印到屏幕      */    public void run()    {        //inBuffer=new byte[1024];        //inPacket =new DatagramPacket(inBuffer,inBuffer.length);//接收数据包        try        {        while(true)        {                    socket.receive(inPacket);                //                System.out.println("Form "+inPacket.getAddress()+" "+new String(inPacket.getData(),0,inPacket.getLength(),"UTF-8"));        }        }        catch(Exception e)        {            e.printStackTrace();        }    }    /**      *main entru      */    public static void main(String[] args)    {        new MainClass5().init();    }} 


我在自己的笔记本上(linux)运行linux端程序,在虚拟机(xp)里面运行windows端程序,运行没有问题,可以实现双方通信。然后我在另一台电脑(xp)运行windows端程序(这几个系统已经在一个局域网内,用路由器连同,互相能ping同),然后问题来了,虚拟机xp,笔记本linux,上面都能发送和接收数据,但是另一台xp只能接受数据,也就是虚拟机和linxu聊天,另一台xp干瞪眼看着人家聊天,自己不能说话。
我查看那台xp的防火墙,没有开启。至于还有什么原因导致这个问题,我实在想不出来,希望大家给点建议,或者看看我的代码有问题么?谢谢了。

[解决办法]
我在网上看了些代码。自己也做了测试。第三方能收到消息,说明他已经加到了group中,剩下的问题是为什么他发送的消息别人接收不到。socket.setLoopbackMode(true);把这个设置为false试试,这个是会发回给自身。如果收到自己的消息,说明已经传到服务器上了,剩下就是验证服务器为什么不转发给其他客户端。