首页 > 代码库 > Android与服务器通信的方法之一(TCP)效率高安全性完善

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

之前一直会用sockets来实现emulator和PC进行通讯,卡了几天,最后请教其他人终于可以连接了。  错误原因是在IP和端口,IP要用本机IP(在CMD输入ipconfig,注意:每次开机本机IP都不同,ADSL是动态IP),端口用emulator的名称,5554或5556.java sever文件要另外建java工程运行,在android工程运行不了java(run application) 


客户端代码: 
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());   
                }   
            }   
        });   
    }   
}  

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()); 
} 
} 
}); 
} 
} 







服务器端代码: 
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();   
    }   
}