Android中的Socket编程的基本思路
来源:互联网 发布:淘宝查假冒伪劣处罚 编辑:程序博客网 时间:2024/06/06 04:50
学习了一段时间的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 stubnew 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 stubtry{//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当中得到OutputStreamOutputStream 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();}}}
- Android中的Socket编程的基本思路
- Windows Socket编程的基本思路
- android wifi的基本思路
- Android中的Socket编程
- Android中的socket编程
- Android中的socket编程,基础
- Android 封装一个简单的SDK基本思路.
- Android中的socket编程-关于设置连接的ip问题
- android中的网络通信(一) socket编程
- Android中的socket编程(一)
- Android中的socket编程(三)
- Android的Socket通信编程
- Android的Socket编程实现
- 3.android的socket编程
- android的SOCKET网络编程
- Android端的socket 编程
- XMPP的基本使用以及Android即时通讯的基本思路
- Socket编程中的一个诡异的问题
- SQL查询显示行号、随机查询、取指定行数据
- eclipse视图切换和配置Web服务器
- Android之Adapter用法总结
- 幼儿园教育应坚持积极鼓励教育
- mule进阶之jdbc transport:
- Android中的Socket编程的基本思路
- C++ 回忆录8 copy constructor and Assigment Operator
- jrtplib 源码分析 (一) 辅助类
- sockfs: the most simple file system in linux kernel
- C# 上传 下载 源代码
- 一个教训
- 大数运算小结
- 实例repeater 分页、表头不动、添加列序号(dataset实现)
- js通过Class Name获取一个对象的数组