关于android UDP 客户端与delphi UDP服务端通讯中文乱码问题

废话不多直接上android发送代码:

        String message = “这是一个中文测试”;
	// 这里是重点,要将字符串进行Base64加密
        message = Base64.encodeToString(message.getBytes(), Base64.DEFAULT);
        int server_port = 12345;
        DatagramSocket s = null;
        try {
            s = new DatagramSocket();
        } catch (SocketException e) {
            e.printStackTrace();
        }
        InetAddress local = null;
        try {
            local = InetAddress.getByName(edt_ip.getText().toString());
        } catch (UnknownHostException e) {
            e.printStackTrace();
            Toast.makeText(this, "无法连接服务器!", Toast.LENGTH_SHORT).show();
        }
        int msg_length = message.length();
        byte[] messageByte = message.getBytes();
        DatagramPacket p = new DatagramPacket(messageByte, msg_length, local,
                server_port);
        try {
            s.send(p);
        } catch (Exception e) {
            Log.e("UDPTEST", e.toString());
            Toast.makeText(this, "发送失败!", Toast.LENGTH_SHORT).show();
        }
然后看delphi端接收处理:

uses EncdDecd

function IdBytesToAnsiString(ParamBytes: TIdBytes): AnsiString;
var
  i: Integer;
  S: AnsiString;
begin
  S := '';
  for i := 0 to Length(ParamBytes) - 1 do
  begin
    S := S + AnsiChar(ParamBytes[i]);
  end;
  Result := S;
end;

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
var
  sTmp : string;
begin
  // 将接收的TIdBytes 转换成字符串
  sTmp:= IdBytesToAnsiString(AData);
  // 将字符串进行Base64解码
  Memo1.Lines.Add(DecodeString(sTmp));
end;



你可能感兴趣的:(android,delphi)