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.需使用未被占用的端口。
代码如下:
服务端:
Android客户端:
MainActivity.java:
main.xml:
——使用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>
相关文章推荐
- Android开发笔记: Socket通信--【带例子】
- Socket通信——Android手机客户端和电脑服务器通信小例子
- Android简单的socket网络通信例子--群聊
- android socket 通信例子
- Android Socket网络通信
- android端和pc端使用usb进行socket通信,其中android是服务器端,pc是客户端。如何实现安卓端输入的数据通过按钮发送到pc端?
- linux下socket通信,server和client简单例子 文件传输
- Android Socket网络通信
- Linux下socket编程实现客户机服务器通信的例子
- linux下socket通信,server和client简单例子
- android socket 即时通信
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Android利用JNI通过Socket与服务器进行通信
- Qt网络应用----socket通信例子
- Android网络编程实践之旅(二):基于Socket的网络通信
- delphi(客户端) socket 与 PHP_socket(服务器) 通信的例子
- android socket通信
- android网络通信之socket教程实例汇总
- Android 之 Socket 通信
- 【Android】 基于Socket 的即时通信软件 YQ(源码下载)