android中socket编程

来源:互联网 发布:软件家园 编辑:程序博客网 时间:2024/05/17 15:21
socket编程
服务器端:
EchoServer.java文件
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class 
EchoServer extends Thread {
 private static final int PORT=8888;
 private EchoServer(){}
 /**
  * @param args
  */

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  EchoServer echoServer=new EchoServer();
  if(echoServer!=null)
   echoServer.start();
  System.out.println("start");
 }
 final static int sleepTime=5;
 public void run()
 {
  try{
   ServerSocket server=new ServerSocket(PORT,10);
   while(true)
   {
    Socket client=server.accept();
    System.out.println("Client Connected");
    while(true)
    {
     BufferedReader reader=new BufferedReader(
       new InputStreamReader(client.getInputStream()));
     System.out.println("read from client");
     String textLine =reader.readLine()+"\n";
     if(textLine.equalsIgnoreCase("EXIT\n"))
     {
      System.out.println("EXIT invoked,closing client");
      break;
     }
     BufferedWriter writer=new BufferedWriter(
       new OutputStreamWriter(client.getOutputStream()));
     System.out.println("Echo input to client"+textLine);
     String text="ECHO from server:"+textLine;
     writer.write(text,0,text.length());
     writer.flush();
    }
    client.close();
    Thread.sleep(sleepTime);
   }
  }catch(IOException e)
  {
   e.printStackTrace();
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
 }
}
客服端:
Hello.java文件
package com.teleca.Socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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.TextView;
public class Hello extends Activity {
 TextView textConent;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
  Button button = (Button) findViewById(R.id.Button01);
  OnClickListener listener = new OnClickListener() {
   @Override
   public void onClick(View v) {
    mode =MODE_SOCKET;
    doAction();
   }
  };
  button.setOnClickListener(listener);
  textConent = (TextView) findViewById(R.id.TextView01);
    }
    final static int MODE_SOCKET=0;
    int mode;
    final static String tag="hubin";
    final static String ip="10.89.3.108";
    final static String port="8888";
 class ConnectThread implements Runnable {
  public void run() {
   Message message=Message.obtain(handler);
   Bundle b=new Bundle();
   if(mode==MODE_SOCKET)
   {
    String text=callSocket(ip,port,"Hello,Time is "+System.currentTimeMillis());
    if(text==null)
    {
     message.what=FAIL;
     b.putString("content", "Erro");
    }
    else
    {
     message.what=SUCCESS;
     b.putString("content", text);
    }
   }
   message.setData(b);
   message.sendToTarget();
  }
 }
 private String callSocket(String ip,String port,String socketData)
 {
  Socket socket=null;
  BufferedWriter writer=null;
  //BufferedReader reader=null;
  InputStream is;
  String output="Hello";
  try
  {
   socket=new Socket(ip,Integer.parseInt(port));
   writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

   //reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
   is=socket.getInputStream();
   String input=socketData;
   writer.write(input+"\n", 0, input.length()+1);
   writer.flush();
   Thread.sleep(100);
   int size=is.available();
   byte buffer[]=new byte[size];
   is.read(buffer);
   //output=reader.readLine();
   output=new String(buffer);
   Log.i(tag,"get success"+output);
   writer.write("Exit\n",0,5);
   writer.flush();
   Log.i(tag,"send success");
  }catch(IOException e)
  {
   Log.e(tag, "connect erro:",e);
  }catch(InterruptedException e)
  {
   Log.e(tag, "Thread erro:",e);
  }
  return output;
 }
 final static int SUCCESS=0;
 final static int FAIL=1;
 Handler handler =new Handler(){
  public void handleMessage(Message message){
  
 Log.i(tag,"handle");
   if(message==null)
    return;
   int what=message.what;
   if(what==SUCCESS)
   {
    String text=message.getData().getString("content");
    textConent.setText(text);
    textConent.invalidate();
   }
  }
 };
 void doAction() {
  Thread t=new Thread(new ConnectThread());
  t.start();
 }
}
注意1:AndroidManifest.xml中要加入权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
注意2:可用BufferedReader进行读