写两个客户端,每个客户端都有发送和接受,但不知道要怎样实现?package com.crazy;
import java.net.*;
import java.io.*;public class CrazyServer {


public static void main(String[] args) {
ThreadClient tc = new ThreadClient();
ThreadServer ts = new ThreadServer();
tc.runClient();
ts.runServer();

Thread th1 = new Thread(tc);
Thread th2 = new Thread(ts);
th1.start();
th2.start();
}
}class ThreadServer implements Runnable {
DatagramPacket dp = null;
DatagramSocket ds = null;
byte[] buf = null;

public void runServer() {
 buf = new byte[1000];
 dp = new DatagramPacket(buf,buf.length);

 try {
ds = new DatagramSocket(6060);
} catch (SocketException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}

public void run() {
while(true) {

try {
ds.receive(dp);
System.out.println(new String(buf,0,dp.getLength()));

try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

} }
} class ThreadClient implements Runnable {
 byte[] bt = null;
 DatagramPacket dp =null;
 DatagramSocket ds = null;
 public void runClient() {
 bt = (new String("你好")).getBytes();
 try {

 dp = new DatagramPacket(bt,bt.length,new InetSocketAddress("127.0.0.1",9090));
// ds = new DatagramSocket(6060);
 } catch (SocketException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}      
      
 }
 
 public void run() {
      try {
ds.send(dp);
 ds.close();
 try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
 
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
     
 }
} 高手指教..

解决方案 »

  1.   

    LZ的代码冒是没有问题的样子.
    贴一个自己写的基于UDP的聊天室,供LZ参考下:
    package socket;import java.awt.BorderLayout;
    import java.awt.Frame;
    import java.awt.List;
    import java.awt.Panel;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    import java.net.UnknownHostException;public class Chat {
    Frame f = new Frame("我的聊天室"); TextField tfIP = new TextField(15); List lst = new List(6); DatagramSocket ds; public void init() {
    f.setSize(300, 700);
    f.setLocation(700, 20); Panel p = new Panel();
    p.setLayout(new BorderLayout());
    p.add("West", tfIP);
    TextField tfData = new TextField(20);
    p.add("East", tfData);
    f.add(lst);
    f.add("South", p);
    f.setVisible(true);
    f.setResizable(false);
    f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    f.setVisible(false);
    f.dispose();
    System.exit(0);
    }
    });
    tfData.addActionListener(new ActionListener() {
    DatagramPacket dp; public void actionPerformed(ActionEvent e) {
    byte[] buf;
    buf = e.getActionCommand().getBytes();
    try {
    dp = new DatagramPacket(buf,
    buf.length,
    java.net.InetAddress
    .getByName(tfIP
    .getText()),
    3000);
    } catch (UnknownHostException e1) {
    e1.printStackTrace();
    }
    try {
    ds.send(dp);
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    ((TextField) e.getSource()).setText("");
    }
    });
    } public Chat() {
    try {
    ds = new DatagramSocket(3000);
    } catch (SocketException e) {
    e.printStackTrace();
    }
    new Thread(new Runnable() {
    public void run() {
    byte[] buf = new byte[1024];
    DatagramPacket dp = new DatagramPacket(buf,
    1024);
    while (true) {
    try {
    ds.receive(dp);
    } catch (IOException e) {
    e.printStackTrace();
    }
    lst.add(new String(buf, 0, dp
    .getLength())
    + " from "
    + dp.getAddress()
    + " : " + dp.getPort()); }
    }
    }).start(); } public static void main(String[] args) {
    Chat chat = new Chat();
    chat.init();
    }
    }
      

  2.   

    答:楼主的要求我不明白啊。UDP的点对点两个客户端
    明白了问题,就要解决问题了。楼主到底想要做什么呢?
    是两个客户端之间的一对一通信(不需要借助UDPServer)?还是在UDPServer帮助下进行一对一?还是。?
    我以以肯定地说,UDP的一对一(楼主的一对一到底是什么含义呢?)是要进行特别考虑与设计的。不是开两个端口就了事的
      

  3.   

    我是想在两个JAVA文件都有发送和接受功能,这样就可以了。而且只能有两个用户互相通信!!
      

  4.   

    答:
    1)只要写一个UDP程序就行了(不必要通常大家本能就想到的:一个服务器,一个客户机。)。该程序打开一个UDP端口号如:6666;创建两个线程:一个只管收,另一个只管发。
    2)两个用户,在各自的机器上运行这同一个UDP程序,就可以工作了。
    3)UDP不是一对一的,本质上是一对多的。即:任何第三个用户只要知道某一个用户的IP与端口号,就能发UDP包给该用户。这是你阻止不了的(即:你的只能有两个用户互相通信!!,连接型的UDP也不行。)。因此,你只能在程序中通过判发送方的IP或你认为的其它用户身份认证,来丢弃你不需要的第三个用户的UDP包。以上仅供你参考