2014年12月16日 星期二

Android-Socket Client 端 發送 訊息

Socket : 網路編程,兩台電腦相互通訊數據。
基本模型 : Client、Server
基本概念 : 兩個進程之間相互通訊,然後其中一個必須提供固定的位置,而另一個端
                   只需要知道這個固定的位置,並去建立兩者之間的聯繫。固定位置的被稱
                   為伺服器;建立聯繫的被稱為客戶端。

Control.java
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

import javax.net.SocketFactory;

import android.util.Log;

public class Control {

    private static String host;
    private static int port;
    private static int timeout = 3000;
    private static PrintWriter mOutput;

    public Control(String host, int port){
        Control.host = host;
        Control.port = port;
    }
    
    public void send(String mess, ControlCallback controlCallback){
        new Send(mess, controlCallback).start();
    }
    
    //發送訊息
    private static class Send extends Thread {
        final String action;

        public Send(String action) {
            this.action = action;
            
        }

        public void run() {

            try{
                
                Socket socket = SocketFactory.getDefault().createSocket();
                SocketAddress remoteaddr = new InetSocketAddress(host, port);
                socket.connect(remoteaddr, timeout);  
                
                Log.d("tag","running!!!  Host : "+host+" port : "+port);
                mOutput = new PrintWriter(new BufferedWriter(
                                new OutputStreamWriter(socket.getOutputStream())), true);
                mOutput.println(action);
                Log.d("tag","Link success");
                
            }catch(ConnectException e){
                Log.d("tag","Fail !! ConnectException : "+e.getMessage());

            }catch(Exception e){
                Log.d("tag","Fail !!  Exception : "+e.getMessage());

            }
        };
    }
}


記得要加入權限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET"/>

歡迎轉載,請註明出處。



2 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
    回覆
    1. 我跑的時候出現:ControlCallback cannot be resolved to a type?

      刪除