关于android UDP 客户端与delphi UDP服务端通讯中文乱码问题
16lz
2021-12-11
废话不多直接上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(安卓)中数据库查询方法 query() 中的 selectionArgs 的
- Android(安卓)WebView选择图片、发送图片
- Android(安卓)里面的android_secret_code
- Android开发之与服务器(jsp)发送、接受JSON数据
- android string.xml中格式资源字符串
- Android(安卓)providers 解析之telephony
- Android第二个功能:短信发送
- android发送post请求出现问题
- Android调用系统短信发送界面并预设接收号码、短信内容