安卓Socket通讯简单示例
来源:互联网 发布:东莞三星视界待遇知乎 编辑:程序博客网 时间:2024/06/07 19:50
安卓Socket通信详解
1>Socket是什么:
也叫做“套接字”用于描述IP地址和端口,在网络上的主机一般运行多个软件,提供多种服务,每种服务都会打开一个Socket,并绑定到一个端口上,不同端口对应不同服务
网络上的两个程序通过双向的通讯连接实现数据交换,,这个双向链路的一端称为一个Socket,Socket通常用于实现客户端和服务端的连接,Socket是TCP/IP协议的一个十分流行的网络编程,连接成功后,两端都会产生一个实例,操作这个实例,完成所需会话.
2>下面通过一个极其简单的Demo,演示最基本的Socket通信
【服务端代码:在指定端口8989监听客户端请求,一旦有请求,便执行操作,然后继续监听,使用accept()这个阻塞函数,该方法调用后一直等待客户端的请求,直到有请求且连接到同一个端口,accept()返回一个对应于客户端的Socket,本例中很简单,服务端不断监听,一旦有请求就输出一段信息】
安卓Socket小Demo
首先是服务器端代码
3>打开eclipse新建一个java工程Main.java,这个就是服务器端的代码,
import java.io.BufferedWriter;import java.io.IOException;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;/** * Created by allan on 17-5-31. * QQ Num: 1750398075 * CSDN Blog: http://blog.csdn.net/allan_bst * Personal Website: http://mobiledream.top * Personal Sina E-mail: jsp0369@163.com *///Socket 服务端public class Main { private static final int PORT = 8989; public static void main(String[] args) { try { // 实例化服务器套接字 设置端口号8989 ServerSocket server = new ServerSocket(PORT); while (true) { Socket socket = server.accept(); // 获取输出流 BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())); // 写字符串 writer.write("这是一段来自服务器的问候:Hello World!"); writer.flush(); writer.close(); } } catch (IOException e) { e.printStackTrace(); } }}
上面代码很简单,循环监听8989端口,使用accept()这个阻塞函数,该方法调用后一直等待客户端的请求,直到有请求且连接到同一个端口,accept()返回一个对应于客户端的Socket
4>下面是android客户端的相关内容,界面有一个按钮,点击后请求服务端的制定端口,然后显示服务端的内容
打开AndroidStudio,新建一个安卓工程
1)首先是MainActivity.java
点击按钮时,开启子线程,实例化Socket,传入ip和port
package com.example.allan.socketclient;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.TextView;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;/** * Created by allan on 17-5-31. * QQ Num: 1750398075 * CSDN Blog: http://blog.csdn.net/allan_bst * Personal Website: http://mobiledream.top * Personal Sina E-mail: jsp0369@163.com *///Socketpublic class MainActivity extends Activity { private TextView txt; private String line; private static final String HOST = "10.0.2.2"; //虚拟机的地址 private static final int PORT = 8989; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txt = (TextView) findViewById(R.id.text); } public void click(View view) { new Thread() { @Override public void run() { try { // 实例化Socket Socket socket = new Socket(HOST, PORT); // 获得输入流 BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream())); line = br.readLine(); br.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 执行完毕后给handler发送一个消息 handler.sendEmptyMessage(0); } }.start(); } // 定义Handler对象 private Handler handler = new Handler() { @Override // 当有消息发送出来的时候就执行Handler的这个方法 public void handleMessage(Message msg) { super.handleMessage(msg); // 处理UI txt.setText(line); Log.i("MSG", "收到消息----->" + line); } };}
5>然后是activity_main.xml布局很简单,一个TextView 和一个 Button
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.allan.androidsockte.MainActivity"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="30dp" android:textSize="20sp" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:onClick="click" android:id="@+id/btn_receive" android:layout_width="368dp" android:layout_height="wrap_content" android:text="接收消息" tools:layout_editor_absoluteY="0dp" tools:layout_editor_absoluteX="8dp" /></LinearLayout>
接下来是图片演示,首先运行Server端代码,Main.java
然后启动客户端,即可
- 安卓Socket通讯简单示例
- 安卓socket通讯
- 安卓中的socket通讯
- Silverlight Socket通讯示例
- 安卓 OKHTTP 简单示例
- 安卓 socket简单使用
- socket通讯简单例子
- Socket简单通讯
- 简单的Socket通讯
- 简单的socket通讯
- 简单的socket通讯
- Socket通讯简单学习
- Unix Socket本地通讯示例
- Java SSL Socket通讯示例
- 用socket通讯示例代码
- Java SSL Socket通讯示例
- 安卓客户端通过socket与服务器进行通讯
- 简单的java socket通讯
- Idea 启动tomcat 访问页面回显数据中文乱码解决方法
- HDU 4565 So Easy! 构造矩阵(两种方法)
- 选择器
- jquery js传非数字参,radio设置的方法
- java中判断一个字符串是否包含另外一个字符串,如果包含,计算出字符串的开始位置
- 安卓Socket通讯简单示例
- Maven搭建Spring+SpringMVC+Mybatis+Shiro项目详解
- codeforces A. Domino piling
- python反混淆javascript代码
- 进程学习8--进程状态和system函数
- WS2008安装IIS7时提示安装失败,错误代码0x80070643解决方案
- linux下的内存检查
- Spark集群环境搭建
- java-网络编程(socket)