手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >Android编程之客户端通过socket与服务器通信的方法
Android编程之客户端通过socket与服务器通信的方法
摘要:Android编程之客户端通过socket与服务器通信的方法本文实例讲述了Android编程之客户端通过socket与服务器通信的方法。分享...

Android编程之客户端通过socket与服务器通信的方法

本文实例讲述了Android编程之客户端通过socket与服务器通信的方法。分享给大家供大家参考,具体如下:

下面是一个demo,Android客户端通过socket与服务器通信。

由于Android里面可以完全使用java.io.*包和.*包,那么,实际上,逻辑部分与J2SE没有区别。只是UI代码不一样。

Android客户端通过socket与服务器通信分为下面5步:

(1)通过IP地址和端口实例化Socket,请求连接服务器;

代码如下:

socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321

(2)获取Socket流以进行读写,并把流包装进BufferWriter或者PrintWriter

代码如下:

PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);

这里涉及了三个类:socket.getOutputStream得到socket的输出字节流,OutputStreamWriter是字节流向字符流转换的桥梁,BufferWriter是字符流,然后再包装进PrintWriter。

(3)对Socket进行读写

代码如下:

out.println(message);

(4)关闭打开的流

代码如下:

out.close();

完整工程代码如下:

package com.yarin.android.Examples_08_04;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import .Socket;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class Activity01 extends Activity

{

private final String DEBUG_TAG = "Activity01";

private TextView mTextView = null;

private EditText mEditText = null;

private Button mButton = null;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(yout.main);

mButton = (Button)findViewById(R.id.Button01);

mTextView = (TextView)findViewById(R.id.TextView01);

mEditText = (EditText)findViewById(R.id.EditText01);

//登陆

mButton.setOnClickListener(new OnClickListener()

{

public void onClick(View v)

{

Socket socket = null;

String message = mEditText.getText().toString() + "/r/n";

try

{

//创建Socket

// socket = new Socket("192.168.1.110",54321);

socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321

//向服务器发送消息

PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);

out.println(message);

//接收来自服务器的消息

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String msg = br.readLine();

if ( msg != null )

{

mTextView.setText(msg);

}

else

{

mTextView.setText("数据错误!");

}

//关闭流

out.close();

br.close();

//关闭Socket

socket.close();

}

catch (Exception e)

{

// TODO: handle exception

Log.e(DEBUG_TAG, e.toString());

}

}

});

}

}

布局文件main.xml

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/TextView01"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="这里显示接收到服务器发来的信息"

/>

android:id="@+id/EditText01"

android:text="输入要发送的内容"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:id="@+id/Button01"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="发送"

/>

AndroidManifest.xml文件如下

package="com.yarin.android.Examples_08_04"

android:versionCode="1"

android:versionName="1.0">

android:label="@string/app_name">

当然,还有服务器端得代码

package com.yarin.android.Examples_08_04;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import .ServerSocket;

import .Socket;

public class Server implements Runnable

{

public void run()

{

try

{

//创建ServerSocket

ServerSocket serverSocket = new ServerSocket(54321);

while (true)

{

//接受客户端请求

Socket client = serverSocket.accept();

System.out.println("accept");

try

{

//接收客户端消息

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

String str = in.readLine();

System.out.println("read:" + str);

//向服务器发送消息

PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);

out.println("server message");

//关闭流

out.close();

in.close();

}

catch (Exception e)

{

System.out.println(e.getMessage());

e.printStackTrace();

}

finally

{

//关闭

client.close();

System.out.println("close");

}

}

}

catch (Exception e)

{

System.out.println(e.getMessage());

}

}

//main函数,开启服务器

public static void main(String a[])

{

Thread desktopServerThread = new Thread(new Server());

desktopServerThread.start();

}

}

先开启服务器代码

java Server即可

然后启动android模拟器。运行结果

这是Android客户端。输入12345,点击发送:

Android编程之客户端通过socket与服务器通信的方法1

这是服务器端收到的消息

Android编程之客户端通过socket与服务器通信的方法2

【Android编程之客户端通过socket与服务器通信的方法】相关文章:

Android 将TabHost放在最下方显示

Android实现宫格图片连续滑动效果

Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法

android计算pad或手机的分辨率/像素/密度/屏幕尺寸/DPI值的方法

Android 通过onDraw实现在View中绘图操作的示例

Android:多线程之进程与线程

android 开发教程之日历项目实践(二)

Android实现自定义带文字和图片Button的方法

Android判断包名和类名是否存在的方法

Android 编程中文本框中搜索和清空效果实现

精品推荐
分类导航