如题。有没有高手帮忙帮忙啊?

解决方案 »

  1.   

    服务端与 客户端最好统一字符编码呀。。UTF-8的呀
      

  2.   

    private void sendMessage() throws IOException {
    // TODO Auto-generated method stub
    System.out.println(FormatToUTFStr(mStrMSG));
    for(Socket client : mClientList){
    mPrintWriter = new PrintStream(client.getOutputStream(),true);
    mPrintWriter.println(FormatToGbkStr(mStrMSG));
    }
    }

    public String FormatToGbkStr(String str){
    if(str == null || str.length() ==0){
    return "";
    }
    try{
    return new String(str.getBytes("UTF-8"),"ISO-8859-1");
    }catch(UnsupportedEncodingException e){
    return str;
    }
    }

    public String FormatToUTFStr(String str){
    if(str == null || str.length() ==0){
    return "";
    }
    try{
    return new String(str.getBytes("ISO-8859-1"),"UTF-8");
    }catch(UnsupportedEncodingException e){
    return str;
    }
    }
      

  3.   

    客服端的:
    package com.server;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    public class Server_0100 {
    private static final int SERVERPORT = 54321;
    private static List<Socket> mClientList = new ArrayList<Socket>();
    private ExecutorService mExecutorServerSocket;
    private ServerSocket mServerSocket;
    private  String ADB_PATH = "D://android/android-sdk-windows/platform-tools/adb.exe";
    private String mStrMSG;
    int flag = 2;


    public static void main(String[] args) {
    new Server_0100();
    } public  Server_0100() {
    try {
    Runtime.getRuntime().exec(ADB_PATH+" forward tcp:12555 tcp:12345");
    mServerSocket = new ServerSocket(SERVERPORT);
    mExecutorServerSocket = Executors.newCachedThreadPool();
    System.out.println("start.....");
    Socket client = null;
    while (true) {
    client = mServerSocket.accept();
    mClientList.add(client);
    ThreadServer threadServer = new ThreadServer(client);
    mExecutorServerSocket.execute(threadServer);
    } } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }  class ThreadServer implements Runnable { private Socket mSocket;
    private BufferedReader mBufferedReader;
    private PrintStream mPrintWriter; public ThreadServer(Socket socket) throws IOException {
    // TODO Auto-generated constructor stub
    this.mSocket = socket;
    mBufferedReader = new BufferedReader(new InputStreamReader(
    socket.getInputStream()));
    mStrMSG = "user:" + this.mSocket.getInetAddress() + " come total:"
    + mClientList.size();
    sendMessage();
    } //@Override
    public void run() {
    // TODO Auto-generated method stub
    try {
    while((mStrMSG = mBufferedReader.readLine()) != null){
    if(mStrMSG.trim().equals("exit")){
    mClientList.remove(mSocket);
    mBufferedReader.close();
    mPrintWriter.close();
    mStrMSG="user:"+this.mSocket.getInetAddress()+"exit total:"+mClientList.size();
    mSocket.close();
    sendMessage();
    break;
    }else{
    mStrMSG = mSocket.getInetAddress() + ":" + FormatToUTFStr(mStrMSG);
    sql();
    flag++;
    sendMessage();
    }
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } } private void sendMessage() throws IOException {
    // TODO Auto-generated method stub
    System.out.println(mStrMSG);
    for(Socket client : mClientList){
    mPrintWriter = new PrintStream(client.getOutputStream(),true);
    mPrintWriter.println(FormatToGbkStr(mStrMSG));
    }
    }

    public String FormatToGbkStr(String str){
    if(str == null || str.length() ==0){
    return "";
    }
    try{
    return new String(str.getBytes("UTF-8"),"ISO-8859-1");
    }catch(UnsupportedEncodingException e){
    return str;
    }
    }

    public String FormatToUTFStr(String str){
    if(str == null || str.length() ==0){
    return "";
    }
    try{
    return new String(str.getBytes("ISO-8859-1"),"UTF-8");
    }catch(UnsupportedEncodingException e){
    return str;
    }
    }

        public void sql(){
         Connection conn = null;
    PreparedStatement pstmt = null;
    String contents = mStrMSG;
    try{
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://localhost/mydata?user=root&password=root");
    String mSql = "insert into bracode_gps values (?, ? )";
    pstmt = conn.prepareStatement(mSql);
    pstmt.setInt(1, flag);
    pstmt.setString(2, contents);
    pstmt.executeUpdate();
    }catch(ClassNotFoundException e){
    e.printStackTrace();
    }catch(SQLException e){
    e.printStackTrace();
    }finally{
    try{
    if (pstmt != null) {
    pstmt.close();
    pstmt = null;
    }
    if (conn != null) {
    conn.close();
    conn = null;
    }
    }catch(SQLException e){
    e.printStackTrace();
    }
    }
        }
    }
    }
      

  4.   

    客户端的:
    package com.test;import java.io.*;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.Socket;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;public class Activity01 extends Activity
    {
    private final String DEBUG_TAG = "Activity01";
    //服务器IP、端口
    private static final String SERVERIP = "192.168.1.88";
    private static final int SERVERPORT = 54321;
    private Thread mThread = null;
    private Socket mSocket = null;
    private Button mButton_In = null;
    private Button mButton_Send= null;
    private EditText mEditText01  = null;
    private EditText mEditText02  = null;
    private BufferedReader mBufferedReader = null;
    private PrintStream mPrintWriter = null;
    private  String mStrMSG = "";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mButton_In = (Button)findViewById(R.id.Button_In);
    mButton_Send = (Button)findViewById(R.id.Button_Send);
    mEditText01=(EditText)findViewById(R.id.EditText01);
    mEditText02=(EditText)findViewById(R.id.EditText02);

    //登陆
    mButton_In.setOnClickListener(new OnClickListener()
    {
    public void onClick(View v)
    {
    try 
    {
    //连接服务器
    mSocket = new Socket(SERVERIP, SERVERPORT);
    //取得输入、输出流
    mBufferedReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream(),"utf-8"));
    mPrintWriter=new PrintStream(mSocket.getOutputStream(),true,"utf-8");
    }
    catch (Exception e) 
    {
    // TODO: handle exception
    Log.e(DEBUG_TAG, e.toString());
    }
    }
    });
    //发送消息
    mButton_Send.setOnClickListener(new OnClickListener()
    {
    public void onClick(View v)
    {
    try 
    {
    //取得编辑框中我们输入的内容
         String str = mEditText02.getText().toString() + "\n";
         //发送给服务器
         if(str.trim() != "exit"){
         mPrintWriter.print(FormatToGbkStr(str));
         mPrintWriter.flush();
         }
         else{
         mPrintWriter.flush();
         mPrintWriter.close();
        
         }
    }
    catch (Exception e) 
    {
    // TODO: handle exception
    Log.e(DEBUG_TAG, e.toString());
    }
    }
    });

    mThread = new Thread(mRunnable);
    mThread.start();
    }

    public String FormatToGbkStr(String str){
    if(str == null || str.length() ==0){
    return "";
    }
    try{
    return new String(str.getBytes("UTF-8"),"ISO-8859-1");
    }catch(UnsupportedEncodingException e){
    return str;
    }
    }

    public String FormatToUTFStr(String str){
    if(str == null || str.length() ==0){
    return "";
    }
    try{
    return new String(str.getBytes("ISO-8859-1"),"UTF-8");
    }catch(UnsupportedEncodingException e){
    return str;
    }
    }

    //线程:监听服务器发来的消息
    private Runnable mRunnable = new Runnable() 
    {
    public void run()
    {
    while (true)
    {
    try
    {
    if ( (mStrMSG = mBufferedReader.readLine()) != null )
    {
    //消息换行
    mStrMSG+="\n";
    mHandler.sendMessage(mHandler.obtainMessage());
    }
    // 发送消息
    }
    catch (Exception e)
    {
    Log.e(DEBUG_TAG, e.toString());
    }
    }
    }
    };

    Handler mHandler = new Handler() 
    {
      public void handleMessage(Message msg)
      {
      super.handleMessage(msg);
      // 刷新
      try
      {
      //将聊天记录添加进来
      mEditText01.append(FormatToUTFStr(mStrMSG));
      }
      catch (Exception e)
      {
      Log.e(DEBUG_TAG, e.toString());
      }
      }
     };
      

  5.   

    socket接收到的buffer和长度len,使用下面的函数getInfoBuff(buff, len)返回字符串。
    private String getInfoBuff(char[] buff, int count)    char[] temp = new char[count];
        for(int i=0; i<count; i++)
        {
            temp[i] = buff[i];
        }
        return new String(temp);
    }