Android Socket通信例子

服務器端:

       ——使用ServerSocket指定監聽端口

       ——等待客戶端連接

       ——將服務端數據放入輸出流中,發送給客戶端

       ——關閉流

客戶端:

       ——通過連接按鈕連接服務器(使用線程連接)

       ——用Socket指定服務器ip和端口號

       ——從Socket中獲取輸入流

       ——讀取服務器數據

       ——將數據讀取到後,使用Handler傳回主進程

       ——關閉流

Tips:

1.      服務端需與客戶端在同一局域網下

2.      AndroidManifest.xml需聲明訪問網絡權限

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

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

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

3.需使用未被佔用的端口。

代碼如下:

服務端:

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;


public class MyServer{
    public static void main(String args[]){
	ServerSocket serverSocket = null;
	Socket socket = null;
	DataOutputStream dos = null;
	try {
	    serverSocket = new ServerSocket(9998);
	    socket = serverSocket.accept();
	    dos = new DataOutputStream(socket.getOutputStream());
	    dos.writeUTF("客戶端數據");
	} catch (IOException e) {
	    // TODO 自動生成的 catch 塊
	    e.printStackTrace();
	}finally{
	    try{
		if(serverSocket != null)
		    serverSocket.close();
		if(socket != null)
		    socket.close();
		if(dos != null)
		    dos.close();
	    }catch(IOException e){
		e.printStackTrace();
	    }
	}
    }
}

Android客戶端:

MainActivity.java:

package com.example.client;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
    private Button button;
    private TextView textView;
    Handler mHandler;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView = (TextView) findViewById(R.id.textView);
        button = (Button) findViewById(R.id.button);
        mHandler = new Mhandler();
        button.setOnClickListener(new OnClickListener(){

	    @Override
	    public void onClick(View arg0) {
		// TODO 自動生成的方法存根
		new ConnectThread().start();
	    }
            
        });
    }

    class Mhandler extends Handler{
	public void handleMessage(Message msg){
	    textView.setText(msg.obj.toString());
	}
    }
    
    class ConnectThread extends Thread{
	Socket socket = null;
	DataInputStream dis = null;
	public void run(){
	    try{
		socket = new Socket("192.168.1.163",9998);
		dis = new DataInputStream(socket.getInputStream());
		Message msg = mHandler.obtainMessage();
		msg.obj = dis.readUTF();
		mHandler.sendMessage(msg);
	    }catch(IOException e){
		e.printStackTrace();
	    }finally{
		try{
		    if(socket != null){
			socket.close();
		    }
		    if(dis != null){
			dis.close();
		    }
		}catch(IOException e){
		    e.printStackTrace();
		}
	    }
	}
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:id="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />
 
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="連接服務器"/>
</RelativeLayout>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章