Android socket 使用PrintWriter和BufferedReader发送和接收出现乱码问题解决

项目中用到了Android和C++的通信,选择了用socket 发送字符的方式,一开始使用的代码是:

					socket=new Socket();
					InetSocketAddress isa = new InetSocketAddress(IP_STR, port);
					socket.connect(isa, 100);
					PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
					BufferedReader recvBuf=new BufferedReader(new InputStreamReader(socket.getInputStream()));

使用这种方式无法设定字符集,无论是发送和接收如果跟服务器的字符集不同,都会出现乱码,

最后将程序改为:

					socket=new Socket();
					InetSocketAddress isa = new InetSocketAddress(IP_STR, port);
					socket.connect(isa, 100);
					PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"gb2312")),true);
					BufferedReader recvBuf=new BufferedReader(new InputStreamReader(socket.getInputStream(),"gb2312"));

我的服务器设定的字符集是gb2312。大家可以根据自己的需要设定字符集,原则是自己发送和对方接收的字符集设定要一致,自己的接收和对方的发送字符集一致。

Android socket 使用PrintWriter和BufferedReader发送和接收出现乱码问题解决,布布扣,bubuko.com

时间: 2024-10-25 13:25:47

Android socket 使用PrintWriter和BufferedReader发送和接收出现乱码问题解决的相关文章

PHP+socket+SMTP、POP3协议发送、接收邮件

1.实现SMTP协议的类dsmtp.cls.php: <?php          // 通过socket实现SMTP协议的功能// version: 1.1// author : DCC// create : 2014-01-17 23:38:24// modify : 2014-01-18 16:59:04// more   : http://www.thinkful.cn/archives/389.html          class Dmail_smtp{               

Android Socket与服务器通信通用Demo

在Android中通过Socket来来连接服务器,是一种比较简单的网络连接方式,虽然现在使用的不多,但某些场合还是很方便的,这里总结一下基本的写法. 客户端: try { Socket socket = new Socket(host, port); socket.setSoTimeout(6 * 1000); PrintWriter printWriter = new PrintWriter( socket.getOutputStream(), true); printWriter.print

Android Socket 发送广播包的那些坑

Socket广播包经常被用于局域网内的两台设备之间互相发现和消息传递,在Android应用开发过程中,也经常会遇到这样的需求,例如:两台Android设备之间.Android与手环等智能硬件之间.Android与Windows电脑之间等等. 本文主要介绍在Android中使用Socket开发广播包程序时需要注意的编程事项,以及解决方法. 首先给出一段Android发送广播包的示例代码: DatagramSocket socket = new DatagramSocket(8000); socke

Java Socket 使用BufferedWriter和BufferedReader要注意readLine 以及换行标志的发送

当接收的类使用的是BufferedReader,发送的类是BufferedWriter的时候,要注意发送的一行要有换行标识符. 请看下面一个例子,服务器接收不到客户端的信息. 服务器: import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * Created by 290248126 on 14-5-10. */ public class Server { public static void ma

一个Android Socket的例子(转)

1.开篇简介 Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用的是DatagramSocket类).要实现Socket的传输,需要构建客户端和服务器端.另外,传输的数据可以是字符串和字节.字符串传输主要用于简单的应用,比较复杂的应用(比如Java和C++进行通信),往往需要构建自己的应用层规则(类似于应用层协议),并用字节来传输. 2.基于字符串传输的Socket案例 1)服务器端代码(基于控制台的应用程序,模拟) import java.io.BufferedReader

一个Android Socket的例子

1.开篇简介 Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用的是DatagramSocket类).要实现Socket的传输,需要构建客户端和服务器端.另外,传输的数据可以是字符串和字节.字符串传输主要用于简单的应用,比较复杂的应用(比如Java和C++进行通信),往往需要构建自己的应用层规则(类似于应用层协议),并用字节来传输. 2.基于字符串传输的Socket案例 1)服务器端代码(基于控制台的应用程序,模拟) import java.io.BufferedReader

Android Socket连接

注意点:注册访问的网络权限:android中UI线程不能有访问网络的操作,否则会报android.os.NetworkOnMainThreadException的异常 <uses-permission android:name="android.permission.INTERNET"/> 实例一 客户端 Java: package com.android.xiong.simplesocket; import java.io.BufferedReader; import j

Android Socket简单测试

这里是将pc作为server,设备作为客户端. Server端代码: public static final String SERVERIP = "192.168.0.2"; public static final int SERVERPORT = 51706; public void run() { try { System.out.println("S: Connecting..."); ServerSocket serverSocket = new Serve

Protobuf实现Android Socket通讯开发教程

本节为您介绍Protobuf实现Android Socket通讯开发教程,因此,我们需要先了理一下protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的格式的数据. 谷歌使用其内部几乎RPC协议和文件格式的所有协议缓冲区. protobuf 适用的语言 正宗(Google 自己内部用的)的protobuf支持三种语言:Java .c++和Pyton,很遗憾的是并不支持.Net 或者 Lua 等语言,但社区的力量是不容忽视的,由于protobuf确实比J