Android與服務器通信的方法之一(TCP)效率高安全性完善

arthurcsh 12年前發布 | 92K 次閱讀 Android開發 移動開發 android tcp服務

Android與服務器通信的方法之一(TCP)效率高安全性完善

客戶端代碼:
Java代碼 

package com.yarin.android.Examples_08_04;   

import java.io.BufferedReader;   
import java.io.BufferedWriter;   
import java.io.InputStreamReader;   
import java.io.OutputStreamWriter;   
import java.io.PrintWriter;   
import java.net.InetAddress;   
import java.net.Socket;   
import android.app.Activity;   
import android.os.Bundle;   
import android.util.Log;   
import android.view.View;   
import android.view.View.OnClickListener;   
import android.widget.Button;   
import android.widget.EditText;   
import android.widget.TextView;   

public class Activity01 extends Activity   
{   
    private final String        DEBUG_TAG   = "Activity01";   

    private TextView    mTextView=null;   
    private EditText    mEditText=null;   
    private Button      mButton=null;   

    @Override  
    public void onCreate(Bundle savedInstanceState)   
    {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   

        mButton = (Button)findViewById(R.id.Button01);   
        mTextView=(TextView)findViewById(R.id.TextView01);   
        mEditText=(EditText)findViewById(R.id.EditText01);   

        //登陸   
        mButton.setOnClickListener(new OnClickListener()   
        {   
            public void onClick(View v)   
            {   
                Socket socket = null;   
                String message = mEditText.getText().toString() + "\r\n";    
                try    
                {      
                    //創建Socket   
                    socket = new Socket("116.29.27.138",5554); //查看本機IP,每次開機都不同   
                    //socket=new Socket("192.168.1.110",50000);   
                    //向服務器發送消息   
                    PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);         
                    out.println(message);    

                    //接收來自服務器的消息   
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));    
                    String msg = br.readLine();    

                    if ( msg != null )   
                    {   
                        mTextView.setText(msg);   
                    }   
                    else  
                    {   
                        mTextView.setText("數據錯誤!");   
                    }   
                    //關閉流   
                    out.close();   
                    br.close();   
                    //關閉Socket   
                    socket.close();    
                }   
                catch (Exception e)    
                {   
                    // TODO: handle exception   
                    Log.e(DEBUG_TAG, e.toString());   
                }   
            }   
        });   
    }   
}  

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class Activity01 extends Activity 
{ 
private final String DEBUG_TAG = "Activity01"; 

private TextView mTextView=null; 
private EditText mEditText=null; 
private Button mButton=null; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

mButton = (Button)findViewById(R.id.Button01); 
mTextView=(TextView)findViewById(R.id.TextView01); 
mEditText=(EditText)findViewById(R.id.EditText01); 

//登陸 
mButton.setOnClickListener(new OnClickListener() 
{ 
public void onClick(View v) 
{ 
Socket socket = null; 
String message = mEditText.getText().toString() + "\r\n"; 
try 
{
//創建Socket 
socket = new Socket("116.29.27.138",5554); //查看本機IP,每次開機都不同 
//socket=new Socket("192.168.1.110",50000); 
//向服務器發送消息 
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);      
out.println(message); 

//接收來自服務器的消息 
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
String msg = br.readLine(); 

if ( msg != null ) 
{ 
mTextView.setText(msg); 
} 
else 
{ 
mTextView.setText("數據錯誤!"); 
} 
//關閉流 
out.close(); 
br.close(); 
//關閉Socket 
socket.close(); 
} 
catch (Exception e) 
{ 
// TODO: handle exception 
Log.e(DEBUG_TAG, e.toString()); 
} 
} 
}); 
} 
} 

服務器端代碼: 
Java代碼  
package com.yarin.android.Examples_08_04;   

import java.io.BufferedReader;   
import java.io.BufferedWriter;   
import java.io.InputStreamReader;   
import java.io.OutputStreamWriter;   
import java.io.PrintWriter;   
import java.net.ServerSocket;   
import java.net.Socket;   

public class Server implements Runnable   
{   
    public void run()   
    {   
        try  
        {   
            //創建ServerSocket   
            ServerSocket serverSocket = new ServerSocket(5554);   
            while (true)   
            {   
                //接受客戶端請求   
                Socket client = serverSocket.accept();   
                System.out.println("accept");   
                try  
                {   
                    //接收客戶端消息   
                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));   
                    String str = in.readLine();   
                    System.out.println("read:" + str);     
                    //向服務器發送消息   
                    PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);         
                    out.println("server message");    
                    //關閉流   
                    out.close();   
                    in.close();   
                }   
                catch (Exception e)   
                {   
                    System.out.println(e.getMessage());   
                    e.printStackTrace();   
                }   
                finally  
                {   
                    //關閉   
                    client.close();   
                    System.out.println("close");   
                }   
            }   
        }   
        catch (Exception e)   
        {   
            System.out.println(e.getMessage());   
        }   
    }   
    //main函數,開啟服務器   
    public static void main(String a[])   
    {   
        Thread desktopServerThread = new Thread(new Server());   
        desktopServerThread.start();   
    }   
}  


 

 本文由用戶 arthurcsh 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!