您的位置:首页 > 移动开发 > Android开发

Android Socket通信例子

2013-12-10 15:03 357 查看
服务器端:

——使用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: