Android 網路編程: SOCKET的簡單使用。

來源:互聯網
上載者:User

本文介紹SOCKET 的服務端和用戶端的開發。 在本文中並沒有使用非同步來對資料進行接收。 因為網上太多有關非同步、儲存用戶端SOCKET的例子了, 但是他們的代碼都非常的多, 非常的繁瑣, 所以這裡就去掉了非同步資料接收等。
首先介紹服務端: 這裡代碼實現的是服務端開啟後就等待用戶端的串連, 當用戶端串連上後就接收訊息, 並發訊息回去後馬上關閉連結。
如果需要做類是聊天室軟體的話需要加上“非同步處理”
[java]
public class SocketServer 

    private ServerSocket mServerSocket; 
    private static final int SERVER_PORT = 6000;    //連接埠 
 
    public SocketServer() 
    { 
 
    } 
 
    public boolean startServer() 
    { 
        boolean bRet = false; 
        try 
        { 
            //建立一個SOCKET 伺服器 
            mServerSocket = new ServerSocket(SERVER_PORT); 
            bRet = true; 
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
 
        return bRet; 
    } 
 
    public void recv() 
    { 
        try 
        { 
            Socket socket = mServerSocket.accept(); 
 
            //拿到用戶端的輸入輸出(讀取,發送) 
            InputStream is = socket.getInputStream(); 
            PrintWriter pw = new PrintWriter(socket.getOutputStream()); 
 
            //這裡讀取用戶端第一次發來的訊息     調試來看吧 
            byte buffer[] = new byte[1024]; 
            int reCount = is.read(buffer); 
            String msgString = EncodingUtils.getString(buffer, "GB2312"); 
             
            //我們發回一個"aa"給用戶端 
            pw.print("aa"); 
            pw.flush(); 
             
            //關掉這個串連 
            socket.close(); 
 
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
    } 
     
    public void close() 
    { 
        try 
        { 
            mServerSocket.close(); 
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
    } 

用戶端:
[java] 
public class SocketClient 

    private Socket socket; 
    private InputStream mInputStream;                
    private PrintWriter mPrintWriter; 
    private static final String SERVER_IP   = "192.168.1.24"; 
    private static final int    SERVER_PORT = 6000; 
     
    public SocketClient() 
    { 
 
    } 
     
    public boolean connection() 
    { 
        boolean bRet = false; 
        try 
        { 
            //建立一個用戶端串連 
            InetAddress ia = InetAddress.getByName(SERVER_IP); 
            socket = new Socket(ia, SERVER_PORT); 
             
            //擷取這個用戶端串連SOCKET的輸入輸出 
            mPrintWriter = new PrintWriter(socket.getOutputStream(), true); 
            mInputStream = socket.getInputStream(); 
             
            bRet = true; 
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
             
        return bRet; 
    } 
     
    //發送訊息 
    public void sendMsg(String msg) 
    { 
        mPrintWriter.print(msg); 
        mPrintWriter.flush(); 
    } 
     
    //讀取訊息 
    public String readMsg() 
    { 
        String msgString = ""; 
        try 
        { 
            byte buffer[] = new byte[1024]; 
             
            int reCount = mInputStream.read(buffer); 
             
            msgString = EncodingUtils.getString(buffer, "GB2312"); 
             
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
         
        return msgString; 
    } 
     
     
    public void close() 
    { 
        try 
        { 
            socket.close(); 
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
    } 

主:
[java] 
private android.view.View.OnClickListener btnClickListener = new android.view.View.OnClickListener() 
    { 
         
        @Override 
        public void onClick(View v) 
        { 
            int id = v.getId(); 
            switch (id) 
            { 
            case R.id.btn: 
            { 
                SocketClient socketClient = new SocketClient(); 
                socketClient.connection(); 
                socketClient.sendMsg("123"); 
                socketClient.sendMsg("123"); 
                socketClient.sendMsg("123"); 
                socketClient.sendMsg("123"); 
                String r = socketClient.readMsg(); 
                socketClient.close(); 
                Toast.makeText(SocketActivity.this, r, Toast.LENGTH_LONG).show(); 
            } 
                break; 
            case R.id.btn_server: 
            { 
                SocketServer socketServer = new SocketServer(); 
                socketServer.startServer(); 
                socketServer.recv(); 
                socketServer.close(); 
            } 
                break; 
            default: 
                break; 
            } 
        } 
    }; 
作者:KnowHeart

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.