java吧 关注:1,246,696贴子:12,724,349
  • 11回复贴,共1

求助,关于socket通信,用UDP协议,乱码的问题

只看楼主收藏回复

package xj.udp;
import java.net.*;
public class MyReceive {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyReceive.receive();
}
public static void receive() {
try {
DatagramSocket ds = new DatagramSocket(9528);// 在端口9528接收数据报包的套接字
byte[] buf = new byte[100];
DatagramPacket dp = new DatagramPacket(buf, 100);// 创建长度为100的数据接收包
ds.receive(dp);// 套接字接受数据包
System.out.println(new String(buf, 0, dp.getLength()));
// 这里接收完成,我们给发送者一条消息,告诉他发送成功了
String str = "message send success!";
DatagramPacket senddp = new DatagramPacket(str.getBytes(),
str.length(), dp.getAddress(), dp.getPort());
// 创建发送包
ds.send(senddp);// 执行发送
ds.close();// 关闭UDP套接字
} catch (Exception e) {
e.printStackTrace();
}
}
}


IP属地:新疆1楼2014-09-01 18:01回复
    package xj.udp;
    import java.io.BufferedInputStream;
    import java.io.DataInputStream;
    import java.net.*;
    public class MySend {
    public static void main(String[] args) {
    String str = "";
    try {
    while (str.length() < 1) {
    System.out.println("请输入您的名字");
    str = new DataInputStream(new BufferedInputStream(System.in))
    .readLine();
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    MySend.send(str);
    }
    public static void send(String str)
    {
    try{
    DatagramSocket ds=new DatagramSocket();
    DatagramPacket dp=new DatagramPacket(str.getBytes(),str.length(),
    InetAddress.getByName("127.0.0.1"),
    9528);
    ds.send(dp);
    byte[] buf=new byte[100];
    DatagramPacket recedp=new DatagramPacket(buf,100);
    ds.receive(recedp);
    System.out.println(new String(buf,0,recedp.getLength()));
    ds.close();
    }catch(Exception e)
    {e.printStackTrace();}
    }
    }


    IP属地:新疆2楼2014-09-01 18:02
    回复
      乱码问题根本就是 上传的编码 和 下载之后的解码 用的不是同一个编码
      String str = "文本";
      Byte[] bytes = str.getBytes("UTF-8");
      然后socket传过去
      收到 bytes
      Streing str = new String(bytes, 0, bytes.length, "utf-8");
      打印 str


      3楼2014-09-01 18:10
      收起回复
        明天试一次,现在下班了,房子没电脑


        IP属地:新疆来自Android客户端4楼2014-09-01 18:19
        回复
          按着这样还是不行,怎么办


          IP属地:新疆来自Android客户端5楼2014-09-02 10:46
          收起回复
            确实是不行


            6楼2016-03-26 13:05
            回复
              我用这个方法搞定了哦!!


              IP属地:广东7楼2017-10-05 11:15
              回复
                试试这个 我用这个做好了
                //2、定义数据包,用于存储数据
                byte[] buf = new byte[1024];
                DatagramPacket dp = new DatagramPacket(buf, buf.length);
                //3、通过服务的receive方法,接收数据并存入数据包中
                ds.receive(dp);
                //4、通过数据包中的方法,获取其中的数据。
                String ip = dp.getAddress().getHostAddress();
                int port = dp.getPort();
                String data = new String(dp.getData(),"GBK");


                8楼2018-03-27 17:14
                回复