基于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通信及数据交互相关推荐

  1. java服务端与Android客户端使用 websocket 通信

    最近因为项目需要所以得使用 websocket 来进行服务器与客户端的通信.使用java 来实现服务端,Android 实现客户端. 刚开始服务端使用 @ServerEndPoint 注解来实现 We ...

  2. 基于TCP/IP协议的物联网安卓应用开发基础教程(Android Studio开发)

    [华为云IOT物联网论坛外部版主:中华小能能] 第0章 简介 大家好,在上上上期发布的教程中,教大家如何利用Android Studio开发出一款接入华为云物联网平台并调用相关API完成设备属性查询. ...

  3. 【网络编程】基于TCP/IP协议的C/S模型

    相关视频--C3程序猿-windows网络编程:第一部分tcp/ip 我的小站--半生瓜のblog 基于TCP/IP协议的C/S模型 基于TCP/IP协议的C/S模型 TCP/IP协议 Client/ ...

  4. 基于TCP/IP协议 区别 GET和POST

    基于TCP/IP协议讲解GET和POST的区别(转载于博客园) 在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象.但是如果路上跑的全是看起来一模一样的汽 ...

  5. Linux系统下实现基于TCP/IP协议的简单Socket通信

    Linux系统下实现基于TCP/IP协议的简单Socket通信 网络套接字Socket Socket概念 主机字节序和网络字节序 Sockaddr地址结构 Socket实现客户端.服务端通信 服务端程 ...

  6. 基于TCP/IP协议的网络摄像头的QT项目

    目录 项目简述: 1.服务器 步骤一:首先搭建一个基本的服务器框架. 1.初始化服务器的函数主体 2.等待连接 步骤二:数据库的使用,本次项目使用的Sqlite3数据库 1.数据库初始化 2.登录时使 ...

  7. 上位机服务器通讯协议,基于TCP/IP协议实现上位机对UR机器人的远程控制

    1.引言 2010年,德国学术界和产业界提出"工业4.0"的概念,即是以智能制造为主导的第四次工业革命,或革命性的生产方法.该战略旨在通过充分利用信息通讯技术和网络空间虚拟系统-信 ...

  8. 打印服务器协议,基于TCP/IP协议的嵌入式网络打印服务器设计

    摘要: 随着电子技术和计算机网络技术的发展,嵌入式系统在家庭和工业的各个领域都得到了广泛的应用,各种信息家电,网络设备以及工业控制领域都出现了嵌入式系统的身影,其数量已经远远超过了各种通用计算机.但是 ...

  9. 关于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% ...

最新文章

  1. spring boot里面的三种配置文件。
  2. php模态窗口,php – 如何在yii2中的模态窗口中使用pjax更新小部件
  3. 标准差、方差、协方差的简单说明
  4. 供配电负荷计算方法详解
  5. android 代码获取屏幕图像,安卓获取屏幕以及获得像素点 ~ 大树洞
  6. python好用的第三方库_非常有用的 Python 第三方库
  7. 【LeetCode】剑指 Offer 10- I. 斐波那契数列
  8. 解决git pull 命令失效,不能从远程服务器上拉取代码问题
  9. matlab中小波去燥原理,用matlab进行小波去噪的程序
  10. http请求报400错误原因
  11. 【Focal Loss】Focal Loss理解
  12. 汽车车灯控制电路模型(转向灯/示廓灯/远近光灯/雾灯/日间行车灯)
  13. 5月17号软件资讯更新合集....
  14. 怀孕之前营养要充分预备
  15. AI热门应用的案例集:学会工程化思维
  16. SecureCRT for Linux
  17. [SWPUCTF 2021 新生赛]babyrce
  18. win7打不开chm格式文件
  19. 检查 GPU 渲染速度和过度绘制
  20. flask如何查询mysql_python3-flask-4查询mysql

热门文章

  1. Linux 高并发学习笔记 - Linux 文件属性函数
  2. Lattice SiI9396SCNUC MHL转HDMI桥片 HDMI接收HDCP解密芯片
  3. n分频器 verilog_verilog实现简单分频器
  4. Java实现excel模板
  5. QQ版网络聊天室完整项目+MFC\C++\C(更改服务器IP可实现异机沟通)
  6. win10无法装载重装系统iso文件,win10系统重装,小编教您win10如何一键系统重装iso...
  7. 百度搜索将推出“惊雷算法”打击网站刷点击作弊行为
  8. 顾问刻薄_开发人员的生活1.04-刻薄
  9. 读“计较,是贫穷的开始”有感
  10. DASCTF X GFCTF 2022十月挑战赛 学习记录