Android中的Socket编程的基本思路

本文介绍了Android中的Socket编程实现方式,包括服务器端和客户端的基本步骤。服务器端通过创建ServerSocket对象监听特定端口并接收客户端连接请求,客户端则通过Socket对象指定服务器IP地址和端口发起连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习了一段时间的android,今天回头看了看Android中的Socket编程,发觉其实Socket编程并不是很难,我把android中的Socket编程整理一下,给出我们一般Socket的步骤。

一、Socket编程分服务器端和客户端,首先,必须建立一个服务器端,以供客户端来连接。以下是建立服务器端程序的基本思路:

1、首先创建一个ServerSocket对象,并让这个ServerSocket在某一个端口号进行监听;

2、调用ServerSocket对象的accept()方法;

3、从Socket当中得到InputStream对象;

4、定义一个字节缓冲数组,用来存放客户端发送过来的数据;

5、从InputStream当中读取客户端发送过来的数据。

基本思路就如上所示,下面给出源码对照。

先给出布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/startListener"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="启动监听线程" />

</LinearLayout>


以下java的源代码:

package com.android.www;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class SocketDemo extends Activity {
    /** Called when the activity is first created. */
	private Button startButton=null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startButton=(Button)findViewById(R.id.startListener);
        startButton.setOnClickListener(new Button.OnClickListener(){

			public void onClick(View v) {
				// TODO Auto-generated method stub
				new ServerThread().start();
			}
        	
        });
    }
    
    class ServerThread extends Thread{
    	public void run(){
    		ServerSocket serverSocket=null;
    		try{
    			//1、创建一个ServerSocket对象,并让这个Socket在4567端口监听
    			serverSocket=new ServerSocket(6789);
    			//2、调用ServerSocket的accept()方法,接受客户端所发送的请求
    			Socket socket=serverSocket.accept();
    			//3、从Socket当中得到InputStream对象
    			InputStream inputStream=socket.getInputStream();
    			//4、定义一个字节缓冲数组,用来存放客户端发送过来的数据
    			byte buffer[]=new byte[1024*4];
    			int temp=0;
    			//5、从InputStream当中读取客户端发送过来的数据
    			while((temp=inputStream.read(buffer))!=-1){
    				System.out.println(new String(buffer,0,temp));
    			}
    		}catch(IOException e){
    			e.printStackTrace();
    		} 	
    		finally{
    			try{
    				serverSocket.close();
    			}catch(IOException e){
    				e.printStackTrace();
    			}
    		}
    	}
    }
}
为了能够使程序顺利运行,必须在AndroidManifest.xml文件中声明权限(绿色加粗部分)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.www"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk android:minSdkVersion="8" />
       <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
       <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
       <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
       <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".SocketDemo"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>


注意:以上程序必须在真实手机上才能够正确运行。

二、以下是建立客户端程序的基本思路:

客户端本人使用java编写,直接在电脑上运行就行,和我们一般运行j2SE的步骤一样。

1、创建一个Socket对象,指定服务器端的IP地址和端口号,和服务器端不同的是这里要给出服务器端的IP地址。因为服务器端是我们要交流的对象;

2、从Socket当中得到OutputStream;

3、定义一个字节缓冲数组buffer,用来储存我们将要发送的数据;

4、把字节缓冲数组的数据从OutputStream中发送出去。

package com.android.www;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			//1、创建一个Socket对象,指定服务器端的IP地址和端口号
			//IP地址可以在命令行中使用IPConfig命令获得
			Socket socket=new Socket("192.168.159.10",6789);
			//在这里,我使用InputStream读取硬盘上的文件,可以进行发送文件
			InputStream inputStream=new FileInputStream("D://Android/Hello.txt");
			//2、从Socket当中得到OutputStream
			OutputStream outputStream=socket.getOutputStream();
			//3、定义一个字节缓冲数组,用来储存从Hello.txt读取到的数据
			byte buffer[]=new byte[4*1024];
			int temp=0;
			//4、把字节缓冲数组的数据从OutputStream中发送出去
			while((temp=inputStream.read(buffer))!=-1){
				outputStream.write(buffer,0,temp);
			}
			outputStream.flush();
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}















评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值