基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互
基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互
- 一、前言
- 1、Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.example.tcpsocketserver,类名为TcpSocketServer。
- 2、Android客户端程序代码项目名为TcpSocketClientOfAndroid,包名为com.example.tcpsocketclientofandroid,类名为MainActivity。
- 二、Java服务端
- Java服务端程序代码
- 三、Android客户端
- (一)、Android客户端主程序的程序代码
- (二)、Android客户端界面布局的程序代码
- (三)、Android客户端编辑字符串的程序代码
- (四)、Android客户端程序配置的程序代码
- 四、运行基于TCP/IP协议的Java服务端与Android客户端的流程图
一、前言
1、Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.example.tcpsocketserver,类名为TcpSocketServer。
2、Android客户端程序代码项目名为TcpSocketClientOfAndroid,包名为com.example.tcpsocketclientofandroid,类名为MainActivity。
二、Java服务端
Java服务端程序代码
Java服务端程序代码:TcpSocketServer.java
package com.example.tcpsocketserver;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class TcpSocketServer
{private static final int PORT = 12345;private List<Socket> mList = new ArrayList<Socket>();private ServerSocket server = null;private ExecutorService myExecutorService = null;private String receiveMsg;private String sendMsg;public static void main(String[] args) {new TcpSocketServer();}public TcpSocketServer() {try {server = new ServerSocket(PORT);myExecutorService = Executors.newCachedThreadPool();System.out.println("服务器已启动...");Socket client = null;while (true) {client = server.accept();mList.add(client);myExecutorService.execute(new Service(client));}} catch (Exception e) {e.printStackTrace();} }class Service implements Runnable {private Socket socket;private BufferedReader in = null;private PrintWriter printWriter=null;public Service(Socket socket) {this.socket = socket;try {printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8")), true);in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));printWriter.println("成功连接服务器"+"(服务器发送)");System.out.println("成功连接服务器");} catch (IOException e) {e.printStackTrace();}}public void run() {try {while (true) {if ((receiveMsg = in.readLine())!=null) {System.out.println("receiveMsg:"+receiveMsg);if (receiveMsg.equals("0")) {System.out.println("客户端请求断开连接");printWriter.println("服务端断开连接"+"(服务器发送)");mList.remove(socket);in.close();socket.close();break;} else {sendMsg = "我已接收:" + receiveMsg + "(服务器发送)";printWriter.println(sendMsg);}}}} catch (Exception e) {e.printStackTrace();}}}}
三、Android客户端
(一)、Android客户端主程序的程序代码
Android客户端主程序的程序代码:MainActivity.java
package com.example.tcpsocketclientofandroid;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.os.Bundle;public class MainActivity extends ActionBarActivity
{private EditText mEditText;private TextView mTextView;private Button connect;private Button send;private Button disconnect;private static final String TAG = "TAG";private static final String HOST = "192.168.31.160";private static final int PORT = 12345;private PrintWriter printWriter;private BufferedReader in;private ExecutorService mExecutorService = null;private String receiveMsg;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mEditText = (EditText) findViewById(R.id.editText);mTextView = (TextView) findViewById(R.id.textView);connect = (Button) findViewById(R.id.connect);send = (Button) findViewById(R.id.send);disconnect = (Button) findViewById(R.id.disconnect);mExecutorService = Executors.newCachedThreadPool();connect.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {mExecutorService.execute(new connectService());}});send.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {String sendMsg = mEditText.getText().toString();mExecutorService.execute(new sendService(sendMsg));}});disconnect.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {mExecutorService.execute(new sendService("0"));}});}private class sendService implements Runnable {private String msg;sendService(String msg) {this.msg = msg;}@Overridepublic void run() {printWriter.println(this.msg);}}private class connectService implements Runnable {@Overridepublic void run() {try {Socket socket = new Socket(HOST, PORT);socket.setSoTimeout(60000);printWriter = new PrintWriter(new BufferedWriter(newOutputStreamWriter(socket.getOutputStream(), "UTF-8")), true);in = new BufferedReader(newInputStreamReader(socket.getInputStream(), "UTF-8")); receiveMsg();} catch (Exception e) {Log.e(TAG, ("connectService:" + e.getMessage()));}}}private void receiveMsg() {try{while (true) {if ((receiveMsg = in.readLine()) != null) {Log.d(TAG, "receiveMsg:" + receiveMsg);runOnUiThread(new Runnable() {@Overridepublic void run() {mTextView.setText(receiveMsg + "\n\n" + mTextView.getText());}});}}} catch (IOException e) {Log.e(TAG, "receiveMsg: ");e.printStackTrace();}}}
(二)、Android客户端界面布局的程序代码
Android客户端界面布局的程序代码:activity_main.xml
<LinearLayout 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:orientation="vertical"tools:context="com.example.tcpsocketclientofandroid.MainActivity" ><EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint=""/><Buttonandroid:id="@+id/connect"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/connect" /><Buttonandroid:id="@+id/send"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/send" /><Buttonandroid:id="@+id/disconnect"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/disconnect" /><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="match_parent"android:text="" />
</LinearLayout>
(三)、Android客户端编辑字符串的程序代码
Android客户端编辑字符串的程序代码:strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">TcpSocketClientOfAndroid</string><string name="hello_world">Hello world!</string><string name="action_settings">Settings</string><string name="connect">CONNECT</string><string name="send">SEND</string><string name="disconnect">DISCONNECT</string>
</resources>
(四)、Android客户端程序配置的程序代码
Android客户端程序配置的程序代码:AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.tcpsocketclientofandroid"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="19" /><uses-permission android:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"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>
四、运行基于TCP/IP协议的Java服务端与Android客户端的流程图
(1)、鼠标右键点击TcpSocketServerOfJava项目——鼠标光标移动到Run As项——点击Java Application项
(2)、点击Java Application项后,Console栏打印输出信息。
(3)、鼠标右键点击TcpSocketClientOfAndroid项目——鼠标光标移动到Run As项——点击Android Application项。
(4)、点击Android Application项后,弹出TcpSocketClientOfAndroid项目的Android模拟器客户端界面。
(5)、点击Android模拟器客户端界面上的CONNECT按钮
(6)、点击Android模拟器客户端界面上的CONNECT按钮后,Console栏打印输出信息,同时Android模拟器客户端界面接收Java服务端反馈回来的信息。
(7)、在Android模拟器客户端界面上的编辑框输入信息,再点击SEND按钮。
(8)、点击Android模拟器客户端界面上的SEND按钮后,Console栏打印输出信息,同时Android模拟器客户端界面接收Java服务端反馈回来的信息。
(9)、再次在Android模拟器客户端界面上的编辑框输入信息,再次点击SEND按钮。
(10)、点击Android模拟器客户端界面上的SEND按钮后,Console栏打印输出信息,同时Android模拟器客户端界面接收Java服务端反馈回来的信息。
(11)、点击Android模拟器客户端界面上的DISCONNECT按钮
(12)、点击Android模拟器客户端界面上的DISCONNECT按钮后,Android模拟器客户端与Java服务端断开连接,Console栏打印输出信息,同时Android模拟器客户端界面接收Java服务端反馈回来的信息。
基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互相关推荐
- java服务端与Android客户端使用 websocket 通信
最近因为项目需要所以得使用 websocket 来进行服务器与客户端的通信.使用java 来实现服务端,Android 实现客户端. 刚开始服务端使用 @ServerEndPoint 注解来实现 We ...
- 基于TCP/IP协议的物联网安卓应用开发基础教程(Android Studio开发)
[华为云IOT物联网论坛外部版主:中华小能能] 第0章 简介 大家好,在上上上期发布的教程中,教大家如何利用Android Studio开发出一款接入华为云物联网平台并调用相关API完成设备属性查询. ...
- 【网络编程】基于TCP/IP协议的C/S模型
相关视频--C3程序猿-windows网络编程:第一部分tcp/ip 我的小站--半生瓜のblog 基于TCP/IP协议的C/S模型 基于TCP/IP协议的C/S模型 TCP/IP协议 Client/ ...
- 基于TCP/IP协议 区别 GET和POST
基于TCP/IP协议讲解GET和POST的区别(转载于博客园) 在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象.但是如果路上跑的全是看起来一模一样的汽 ...
- Linux系统下实现基于TCP/IP协议的简单Socket通信
Linux系统下实现基于TCP/IP协议的简单Socket通信 网络套接字Socket Socket概念 主机字节序和网络字节序 Sockaddr地址结构 Socket实现客户端.服务端通信 服务端程 ...
- 基于TCP/IP协议的网络摄像头的QT项目
目录 项目简述: 1.服务器 步骤一:首先搭建一个基本的服务器框架. 1.初始化服务器的函数主体 2.等待连接 步骤二:数据库的使用,本次项目使用的Sqlite3数据库 1.数据库初始化 2.登录时使 ...
- 上位机服务器通讯协议,基于TCP/IP协议实现上位机对UR机器人的远程控制
1.引言 2010年,德国学术界和产业界提出"工业4.0"的概念,即是以智能制造为主导的第四次工业革命,或革命性的生产方法.该战略旨在通过充分利用信息通讯技术和网络空间虚拟系统-信 ...
- 打印服务器协议,基于TCP/IP协议的嵌入式网络打印服务器设计
摘要: 随着电子技术和计算机网络技术的发展,嵌入式系统在家庭和工业的各个领域都得到了广泛的应用,各种信息家电,网络设备以及工业控制领域都出现了嵌入式系统的身影,其数量已经远远超过了各种通用计算机.但是 ...
- 关于Go语言在服务端做Restful接口和socket通信
转载自: http://xiaorui.cc/2014/10/25/%e5%85%b3%e4%ba%8ego%e8%af%ad%e8%a8%80%e5%9c%a8%e6%9c%8d%e5%8a%a1% ...
最新文章
- spring boot里面的三种配置文件。
- php模态窗口,php – 如何在yii2中的模态窗口中使用pjax更新小部件
- 标准差、方差、协方差的简单说明
- 供配电负荷计算方法详解
- android 代码获取屏幕图像,安卓获取屏幕以及获得像素点 ~ 大树洞
- python好用的第三方库_非常有用的 Python 第三方库
- 【LeetCode】剑指 Offer 10- I. 斐波那契数列
- 解决git pull 命令失效,不能从远程服务器上拉取代码问题
- matlab中小波去燥原理,用matlab进行小波去噪的程序
- http请求报400错误原因
- 【Focal Loss】Focal Loss理解
- 汽车车灯控制电路模型(转向灯/示廓灯/远近光灯/雾灯/日间行车灯)
- 5月17号软件资讯更新合集....
- 怀孕之前营养要充分预备
- AI热门应用的案例集:学会工程化思维
- SecureCRT for Linux
- [SWPUCTF 2021 新生赛]babyrce
- win7打不开chm格式文件
- 检查 GPU 渲染速度和过度绘制
- flask如何查询mysql_python3-flask-4查询mysql
热门文章
- Linux 高并发学习笔记 - Linux 文件属性函数
- Lattice SiI9396SCNUC MHL转HDMI桥片 HDMI接收HDCP解密芯片
- n分频器 verilog_verilog实现简单分频器
- Java实现excel模板
- QQ版网络聊天室完整项目+MFC\C++\C(更改服务器IP可实现异机沟通)
- win10无法装载重装系统iso文件,win10系统重装,小编教您win10如何一键系统重装iso...
- 百度搜索将推出“惊雷算法”打击网站刷点击作弊行为
- 顾问刻薄_开发人员的生活1.04-刻薄
- 读“计较,是贫穷的开始”有感
- DASCTF X GFCTF 2022十月挑战赛 学习记录