概述

在同一局域网内,两台设备通过TCP进行通信聊天。

详细

代码下载:http://www.demodashi.com/demo/10567.html

一、准备工作

开发环境

jdk1.8

Eclipse Luna Service Release 1 (4.4.1)

运行环境:

华为荣耀6(Android4.4)、华为p9(Android7.0)

实现功能:同一局域网下,两台设备进行tcp通信聊天。

详情请参考博客:http://blog.csdn.net/VNanyesheshou/article/details/74896575

二、程序实现

工程截图:

2、实现思路

Android在包Java.NET包下提供了ServerSocket和Socket类,ServerSocket用于创建服务器的Socket。Socket用于实例化客户端的Socket。当连接成功,客户端和服务端都会产生一个Socket实例,通过此Socket进行通信。

3、具体代码

服务端

服务端ServerSocket的构造方法有以下几种:

ServerSocket ():构造一个新的未绑定的ServerSocket。

ServerSocket (int port):构造一个新的ServerSocket并绑定到指定端口,如果port等于0,则端口由系统自动分配。

ServerSocket (int port, int backlog):构造一个新的ServerSocket并绑定到指定端口,并指定进入队列的数目。如果port等于0,则端口由系统自动分配。

ServerSocket (int port, int backlog, InetAddress localAddress):构造一个新的ServerSocket并绑定到指定端口和指定的地址,并指定进入队列的数目。如果port等于0,则端口由系统自动分配。如果localAddress为null,则可以使用任意地址。

1 开启服务

try {    //开启服务、指定端口号ServerSocket mServerSocket = new ServerSocket(5566);
} catch (IOException e) {e.printStackTrace();Toast.makeText(this, "服务开启失败", Toast.LENGTH_SHORT).show();    return;
}

2调用ServerSocket的accept(),监听连接请求,如果客户端请求连接,则接收连接,返回Scoekt对象。

Socket mSocket = mServerSocket.accept();

3 调用Socket类的getInputStream()和getOutputStream()获取输入输出流。

//获取输入流
mInStream = mSocket.getInputStream();
//获取输出流
mOutStream = mSocket.getOutputStream();

步骤4:开始发送、接收数据。

try {   //发送mOutStream.write(msg.getBytes());mOutStream.flush();
}catch (Exception e) {e.printStackTrace();
}byte[] buffer = new byte[1024];
//循环执行read,用来接收数据。
//数据存在buffer中,count为读取到的数据长度。
int count = mInStream.read(buffer);

步骤5:服务不再需要,则关闭服务

if(mServerSocket != null){try {mServerSocket.close();} catch (IOException e) {e.printStackTrace();}
}

客户端

TCP客户端工作具体步骤:

步骤1:创建一个Socket,连接到服务器端、指定端口号。放在子线程中运行,否则会有问题。

class SocketConnectThread extends Thread{public void run(){        try {            //指定ip地址和端口号mSocket = new Socket(mIpAddress,mClientPort);            if(mSocket != null){                //获取输出流、输入流mOutStream = mSocket.getOutputStream();mInStream = mSocket.getInputStream();}} catch (Exception e) {e.printStackTrace();mHandler.sendEmptyMessage(MSG_SOCKET_CONNECTFAIL);            return;}Log.i(TAG,"connect success");mHandler.sendEmptyMessage(MSG_SOCKET_CONNECT);}}

步骤2:调用Socket类的getInputStream()和getOutputStream()获取输入输出流。

具体代码如上所示。

步骤3:发送、接收数据。(发送接收数据与服务端方法相同。)

发送数据:

private void writeMsg(String msg){    if(msg.length() == 0 || mOutStream == null)        return;    try {   //发送mOutStream.write(msg.getBytes());mOutStream.flush();}catch (Exception e) {e.printStackTrace();}
}

接收数据:(从输入流读取数据,需要在一个子线程中循环运行下面的方法。)

byte[] buffer = new byte[1024];//循环执行read,用来接收数据。//数据存在buffer中,count为读取到的数据长度。int count = mInStream.read(buffer);

步骤4:关闭Socket

public void closeConnection(){try {if (mOutStream != null) {mOutStream.close(); //关闭输出流mOutStream = null;}if (mInStream != null) {mInStream.close(); //关闭输入流mInStream = null;}if(mSocket != null){mSocket.close();  //关闭socketmSocket = null;}} catch (IOException e) {e.printStackTrace();}if(mReceiveThread != null){mReceiveThread.threadExit();mReceiveThread = null;}
}

在清单文件中添加权限

AndroidManifest.xml 文件

<uses-permission android:name="android.permission.INTERNET"/>

TCP通信的使用基本就完成了,最后看一下图片,更容易理解其通信机制。

三、运行效果

运行:

选择作为客户端还是服务端

作为服务端如下:(服务端设置监听的端口号)

作为客户端如下:(客户端要设置连接的服务端的ip地址,及端口号)

四、其他补充

参考文章:http://blog.csdn.net/VNanyesheshou/article/details/74896575

注:本文著作权归作者,由demo大师(http://www.demodashi.com)宣传,拒绝转载,转载需要作者授权

Android基于TCP的局域网聊天通信相关推荐

  1. android局域网通信方案,Android基于TCP的局域网聊天通信

    一.准备工作 开发环境 jdk1.8 Eclipse Luna Service Release 1 (4.4.1) 运行环境: 华为荣耀6(Android4.4).华为p9(Android7.0) 实 ...

  2. Android基于UDP的局域网聊天通信

    代码地址如下: http://www.demodashi.com/demo/12057.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1. 开发环境 1.1 开发工 ...

  3. 基于P2P的局域网即时通信应用

    前言 这是一个使用java语言开发的基于P2P的局域网即时通信Android应用,界面是高仿微信的聊天界面,在里面你将会学到java多线程并发编程.Socket编程.UDP广播.TCP连接等. 项目地 ...

  4. 计算机网络课程设计--基于TCP协议网上聊天程序--python实现带图形界面--socket--多线程

                                              基于TCP协议网上聊天程序 引言 21世纪是一个以网络为核心的信息时代,要实现信息化,就必须依靠完善的网络.而随着计 ...

  5. java socket发送定长报文_一个基于TCP协议的Socket通信实例

    原标题:一个基于TCP协议的Socket通信实例 1. 前言 一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度.正好前段时间完成了一个so ...

  6. 基于python的聊天软件的设计与实现_Python基于TCP实现会聊天的小机器人功能示例...

    本文实例讲述了Python基于TCP实现会聊天的小机器人功能.分享给大家供大家参考,具体如下: 一 代码 1.服务端程序 import socket words ={'how are you?':'F ...

  7. 基于TCP协议网上聊天程序(python)带界面

    基于TCP协议网上聊天程序(python)带界面 1 设计目标 基于TCP协议网上聊天程序 实现一简单的聊天程序实现网上聊天,包括服务器和客户端. (1)支持多人聊天: (2)客户端具有图形化用户界面 ...

  8. 基于TCP的网络聊天室实现(C语言)

    基于TCP的网络聊天室实现(C语言) 一.网络聊天室的功能 二.网络聊天室的结果展示 三.实现思路及流程 四.代码及说明 1.LinkList.h 2.LinkList.c 3.client.c 4. ...

  9. Windows网络与通信程序设计实验一:基于TCP的C/S通信仿真

    文章目录 Windows网络与通信程序设计实验一:基于TCP的C/S通信仿真 1. 实验要求: 1.1 实验目的介绍: 1.2 实验相关提示: 2. 实验环境准备: 3. 实验步骤和具体代码理解: 3 ...

最新文章

  1. 【转】C#生成验证码
  2. document.execCommand()方法处理Html数据
  3. 重写equals方法时必须重写hashcode方法吗
  4. 中国半导体硅片行业未来发展趋势与销售规模预测报告2022版
  5. php的webservice的soapheader认证问题
  6. 真正的高手,都有增长思维!(深度好文)
  7. 诗与远方:无题(二十八)- 曾经写给妹子的一首诗
  8. 北大 宾州树库 语料标注集
  9. java 监测粘贴板事件_Java 监视系统剪贴板
  10. ISBN编号的国家地区语言代码,出版社代码规则,中国出版社ISBN代码
  11. newifi路由器 php,newifi路由器有线桥接教程
  12. 计算机本地磁盘设密码,电脑硬盘,教您电脑硬盘怎么设置密码
  13. 程序员月薪过3万,却感叹活得不如狗,北漂压力太大又不敢辞职
  14. css响应式布局及分辨率(PC端、H5端)
  15. STM32F103调试笔记(1)——microusb接入电脑后显示未知USB设备(代码43)
  16. 贝塞尔Bezier曲线的使用
  17. tlp导致linux运行缓慢,在deepin 20系统中使用tlp但无法自动降频的处理
  18. 软件测试——逻辑覆盖
  19. c++练习4) 编写程序把华氏温度转换为摄氏温度,公式为 C=5/9*(F-32)
  20. c#和unity中用的c#的差距

热门文章

  1. 从零开始学电脑办公_每天学一点 7天学会使用电脑办公操作
  2. 22.创建DockWidget
  3. python单词去重及排序_Python实现对文件进行单词划分并去重排序操作示例
  4. Java学习日报—SQL基础—2021/11/29
  5. QT5开发及实例学习之十三Qt5文本编辑功能
  6. 等待队列中为什么需要互斥锁?一个线程在等待时被唤醒后会做什么?安全队列的代码实现
  7. 《深入理解 Spring Cloud 与微服务构建》第三章 Spring Cloud
  8. 【原创源码】(05):C#-计算绝对路径。
  9. 如何在Android中使用OpenCV
  10. git--常用小命令