import java.net.*;
import java.io.*;public class TestUDPServer
{
public static void main(String args[]) throws Exception
{
byte buf[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
DatagramSocket ds = new DatagramSocket(5678);
while(true)
{
ds.receive(dp);
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readUTF());
}
}
}
-------------------------------------
import java.net.*;
import java.io.*;public class TestUDPClient
{
public static void main(String args[]) throws Exception
{
//long n = 10000L;
String s ="hello";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeChars(s);

byte[] buf = baos.toByteArray();


DatagramPacket dp = new DatagramPacket(buf, buf.length, 
   new InetSocketAddress("127.0.0.1", 5678)
   );
DatagramSocket ds = new DatagramSocket(9999);
ds.send(dp);
ds.close();

}
}
----------------------------------
输出结果: ello
怎样才能输出hello呢?

解决方案 »

  1.   

    修改客户端如下:import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;public class TestUDPClient {
    public static void main(String args[]) throws Exception
        {
            //long n = 10000L;
            String s ="hello";
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(baos);
            dos.writeUTF(s);
            
            byte[] buf = baos.toByteArray();
            
            
            DatagramPacket dp = new DatagramPacket(buf, buf.length, 
                                                   new InetSocketAddress("127.0.0.1", 5678)
                                                   );
            DatagramSocket ds = new DatagramSocket(9999);
            ds.send(dp);
            ds.close();
            
        }
    }
      

  2.   

    dos.readUTF(S)和dos.readChars()有什么区别?
      

  3.   

    writeUTF
    public final void writeUTF(String str)
                        throws IOException以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。 
    首先,通过 writeShort 之类的方法将两个字节写入输出流,表示后跟的字节数。该值是实际写出的字节数,不是字符串的长度。根据此长度,使用字符的 UTF-8 修改版编码按顺序输出字符串的每个字符。如果没有抛出异常,则计数器 written 增加写入输出流的字节总数。该值至少是 2 加 str 的长度,最多是 2 加 str 的三倍长度。 
    writeChars
    public final void writeChars(String s)
                          throws IOException将字符串按字符顺序写入基础输出流。通过 writeChar 方法将每个字符写入数据输出流。如果没有抛出异常,则计数器 written 增加 s 长度的两倍。 
    因为你在服务端的接受用的是readUTF,所以客户端发送请求时应该用对应的方法