`
chenhaodejia
  • 浏览: 114640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android客户端与服务端通信乱码问题的解决

阅读更多

在Android客户端与服务器端通信的过程中,使用输入流,输出流。readUTF(Str)和writeUTF(Str)方法能有效解决乱码问题。

以下为源码例子

客户端:
package com.socket.client;


import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class main extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
//定义声明需要用到的UI元素
private EditText edtmsgcontent;
private Button btnSend;
Socket s = null;//声明Socket的引用
DataOutputStream dout = null;//输出流
DataInputStream din = null;//输入流

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        InitView();
    }
    private void InitView()
    {
    //显示主界面
    setContentView(R.layout.main);
   
    //通过id获取ui元素对象
    edtmsgcontent=(EditText)findViewById(R.id.msgcontent);
    btnSend=(Button)findViewById(R.id.btnsend);
   
    //为btnsend设置点击事件
    btnSend.setOnClickListener(this);
    }
   
    public void onClick(View bt)
    {
    try{//连接网络并打开流
        s = new Socket("192.168.10.141", 9998);
        dout = new DataOutputStream(s.getOutputStream());
        din = new DataInputStream(s.getInputStream());
}catch(Exception e){//捕获异常
e.printStackTrace();//打印异常
}
String u_distext = edtmsgcontent.getText().toString();//描述
String msg = u_distext;

try {
dout.writeUTF(msg);//向服务器发送注册消息
// String msg2 = din.readUTF();//接收服务器发送来的消息

} catch (IOException e) {//捕获异常
e.printStackTrace();//打印异常
} finally{
try{
if(dout != null){
dout.close();
dout = null;
}
}
catch(Exception e){//捕获异常
e.printStackTrace();//打印异常信息
}
try{
if(din != null){
din.close();
din = null;
}
}
catch(Exception e){//捕获异常
e.printStackTrace();//打印异常信息
}



}
   
}}



服务器端:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPDesktopServer implements Runnable{


    public static final String SERVERIP = "192.168.10.141";

    public static final int SERVERPORT = 9998;
   
    DataInputStream din = null;//输入流
DataOutputStream dout = null;//输出流




    public void run() {

         try {

             System.out.println("S: Connecting...");

             ServerSocket serverSocket = new ServerSocket(SERVERPORT);
        
                 while (true) {
        
                  Socket client = serverSocket.accept();
                 
                  din=new DataInputStream(client.getInputStream());//输入流
        dout=new DataOutputStream(client.getOutputStream());//输入出流
                 
                  /*
                   *
                   *
                   * 此处增加一个获得用户数据(用户名)的模块。
                   * 令UserData=(User name)
                   * 并将其id和用户名加入到List中
                   *
                   *
                   */

                  System.out.println("S: Receiving...");

                  try {
                
                String msg=din.readUTF();//收消息
      System.out.println("Client msg = " + msg);
                    } catch(Exception e) {

                        System.out.println("S: Error");

                        e.printStackTrace();

                    } finally {

                        client.close();

                        System.out.println("S: Done.");

                    }

             }

          } catch (Exception e) {

             System.out.println("S: Error");

             e.printStackTrace();
         }
       
         
    }

   public static void main (String a[]) {

        Thread desktopServerThread = new Thread(new TCPDesktopServer());

        desktopServerThread.start();
    }
}

 

 

:博客涉及的源码请在千寻资源库www.qxzyk.com 下载获取,谢谢支持。

分享到:
评论

相关推荐

    组播android的客户端和服务端

    3. **Android 组播客户端**:Android客户端通过创建DatagramSocket并加入特定的组播组来接收组播数据。加入组播组通常使用`joinGroup(SocketAddress multicastAddress)`方法。客户端还需要设置一个DatagramPacket...

    C#与Android Socket通信

    3. 数据编码:确保客户端和服务器之间数据编码一致,避免乱码问题。 4. 数据包边界:由于网络传输的无界性,需要定义数据包边界,以便正确解析数据。 5. 错误重试:在网络不稳定时,可以设置重试机制,提高通信成功...

    Android的ssh服务端代码

    在Android平台上,SSH(Secure Shell)服务端代码的实现是一个相对较复杂的任务,因为SSH主要用于提供安全的远程登录和命令行操作,通常与Linux或Unix系统关联。然而,由于Android系统基于Linux内核,因此也可以通过...

    安卓Andriod源码——使用JSON进行网络数据交换(服务端、客户端)的实现.zip

    总之,这个压缩包中的源码实例详细展示了Android客户端和服务端如何使用JSON进行数据交换。通过学习和理解这些代码,开发者可以更好地理解和实践网络通信和JSON处理,提升自己的Android开发技能。

    android 集合SSH客户端实现登录,并保持session访问服务端数据

    在Android开发中,有时我们需要与远程服务器进行交互,执行命令或者传输数据,这时SSH(Secure Shell)客户端就显得尤为重要。SSH提供了一种安全的网络协议,用于在不安全的网络环境中进行加密通信。本篇文章将深入...

    基于Android开发MINA框架使用详解

    4. **Android客户端接收消息问题** - 异步消息处理:由于Android主线程不能直接处理网络I/O,所以需要在后台线程中进行,然后通过Handler或LiveData等机制更新UI。 - 消息完整性的保证:在网络通信中,可能会出现...

    Android 手机和手机之间的Socket通信

    本主题将深入探讨如何在两部Android手机之间使用Socket进行通信,分为服务端(Server)和客户端(Client)两个部分进行讲解。 一、服务端(Server)设置 1. 创建Socket服务:首先,我们需要创建一个ServerSocket...

    Android平台MINA框架使用详细解析

    在Android平台上,MINA(Java Miniature Network Application Framework)是一个高度可扩展的网络应用程序框架,主要用作构建高性能、高效率的服务端和客户端应用程序。它提供了丰富的网络通信API,支持TCP/IP和UDP/...

    Basic4AndriodAdnriod+Delphi RTC 远程读取数据显示的例子

    在这个例子中,XMLRPC可能是服务器与客户端之间的通信协议,用于实现RTC。 在实现过程中,开发者首先会在Delphi中编写服务器端代码,创建一个RTC服务器,该服务器能够处理来自B4A客户端的请求,并返回JSON格式的...

    Delphi 10 DataSnap 开发和案例解析

    DataSnap 是 Embarcadero Delphi 中的一个强大功能,它允许开发者创建分布式应用程序,通过提供数据服务,实现客户端与服务器之间的高效通信。在 Delphi XE10 的环境下,DataSnap 提供了更丰富的特性和优化,使得...

    vb delphi codesoft

    - **网络编程:** 支持创建客户端和服务端应用,实现数据的网络传输。 #### Delphi - **Object Pascal语言:** Delphi基于Object Pascal语言,这是一种扩展了Pascal语言的面向对象编程语言。 - **VCL (Visual ...

    UNIX环境高级编程第二版

    - **错误处理与调试技巧**:提供了实用的错误处理策略和调试工具介绍,帮助读者快速定位并解决程序中的问题。 - **安全性与认证机制**:讨论了在UNIX环境下实现安全编程的最佳实践,包括权限管理、身份验证等。 -...

Global site tag (gtag.js) - Google Analytics