我现在先做的是自发自收,可是接收时候总是只执行第一次,不知道是什么问题。
接收我是直接重写了run方法
public void run()
{
while(true)
{
try
{
byte[] buffer = new byte[1024];

DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

DatagramSocket s1 = new DatagramSocket(8888);

System.out.print("receiving...");

s1.receive(packet);

int len = packet.getLength();

String msg = new String(buffer,0,len);

System.out.println(msg);

this.run();

}
catch(ConnectException connExc)
{
System.err.print("connect error");
}
catch(IOException e)
{

}
}
}
main函数里我是这么写的
ReceiveMsg rm = new ReceiveMsg();
rm.start();
rm.SendMsg();
不知道是不是因为我没理解多线程还是其他的错误。他就是只接收一次,望各位高手帮忙看下,谢谢~

解决方案 »

  1.   

    下面是整个程序的代码import java.net.*;
    import java.io.*;public class Chat 
    {
    public static void main(String[] arg) throws Exception
    {
    ReceiveMsg rm = new ReceiveMsg();
    rm.start();
    rm.SendMsg();
    }
    }class ReceiveMsg extends Thread 
    {
    public void run()
    {
    while(true)
    {
    try
    {
    byte[] buffer = new byte[1024];

    DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

    DatagramSocket s1 = new DatagramSocket(8888);

    System.out.print("receiving...");

    s1.receive(packet);

    int len = packet.getLength();

    String msg = new String(buffer,0,len);

    System.out.println(msg);

    this.run();

    }
    catch(ConnectException connExc)
    {
    System.err.print("connect error");
    }
    catch(IOException e)
    {

    }
    }
    } public void SendMsg()
    {
    send();
    }
    public String beginS()
    {
    String s="";
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br =new BufferedReader(isr);
    try
    {
    s = br.readLine();
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    return s;
    }
    public void send()
    {
    InetSocketAddress addr = new InetSocketAddress("127.0.0.1",8888);
    System.out.print("sending...");
    try
    {
    while(true)
    {
    byte[] data = beginS().getBytes();

    DatagramPacket packet = new DatagramPacket(data,0,data.length,addr);
    DatagramSocket sk = new DatagramSocket();
    sk.send(packet);
    SendMsg();
    }
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    }
    }
      

  2.   

    import java.net.*;
    import java.io.*;public class Chat 
    {
    public static void main(String[] arg) throws Exception
    {
    ReceiveMsg rm = new ReceiveMsg();
    rm.start();
    rm.SendMsg();
    }
    }class ReceiveMsg extends Thread 
    {
    public void run()
    {
    try
    {
    byte[] buffer = new byte[1024];
    DatagramPacket packet = new DatagramPacket(buffer,buffer.length); DatagramSocket s1 = new DatagramSocket(8888);
    while(true){System.out.print("\nreceiving...");s1.receive(packet);int len = packet.getLength();String msg = new String(buffer,0,len);System.out.println("\n receiving       :"+msg);//this.run();
    continue;}
    }
    catch(ConnectException connExc)
    {
    System.err.print("connect error");
    }
    catch(IOException e)
    {
    System.out.print(e.getMessage());
    }
    }
    public void SendMsg()
    {
    send();
    }
    public String beginS()
    {
    String s="";
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br =new BufferedReader(isr);
    try
    {
    s = br.readLine();
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    return s;
    }
    public void send()
    {
    InetSocketAddress addr = new InetSocketAddress("127.0.0.1",8888);
    System.out.print("sending...");
    try
    {
    while(true)
    {
    byte[] data = beginS().getBytes();DatagramPacket packet = new DatagramPacket(data,0,data.length,addr);
    DatagramSocket sk = new DatagramSocket();
    sk.send(packet);
    SendMsg();
    }
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    }
    }