Android端与PC端同步绘画板(一)-使用Socket建立连接

本文档介绍了如何使用Socket在Android设备和PC之间建立TCP连接,以实现同步绘画板功能。首先讲解了Socket通信的基础知识,包括TCP连接步骤和发送Object的注意事项。接着详细阐述了项目中Android端和PC端如何建立通讯,通过继承Serializable接口的类进行数据传输,并在两端解析枚举以执行相应操作。提供了Android端和PC端的通讯类结构及实现细节。
摘要由CSDN通过智能技术生成

源码已经放出,点击这里

一.前言

参加工作到现在大概已经接近2年时间,不长不短,2年的时光,在工作中遇到很多问题,总是会来csdn,github等寻找相对的解决办法,往往可以收获颇丰,一直在索取,但从未付出,最近连续加班2周,终于将手头的事情告一段落。有了一些自己的时间,决定来csdn开博客记录自己的一些东西,有代码,可能也会有一些自己的感想和生活。这篇文章算是一个开篇,第一次写博客,不足住处还望见谅;

二.概述

本系列文章来做一个使用Andorid端的手机和PC端电脑同步的绘画板,可以分别在手机或者电脑上各自绘制,也可以手机绘制,PC端同步。PC绘制,手机端同步。手机端和PC端都实现了一个画板的基础功能(画笔,橡皮,图形,选择颜色,rode,undo等),绘画板文章将会是一个小系列,主要记录一些开发中遇到的一些问题和解决方法,例如手机端和PC端建立连接互通数据PC端和Android端如何适配屏幕等;由于这个小项目还有一些需要完善的地方,所以会先记录,之后会上传代码供大家参考,这篇文章将介绍如何让手机端和PC端建立连接并互通消息,为以后的功能打下基础,开始之前,我们需要先了解以下的一些知识点:

1.Socket实现基于TCP

Socket的通讯步骤

①创建Socket输入IP和端口连接服务器端

②打开链接到Socket的输入\输出流

③按照协议对Socket进行读写操作

④关闭输入输出流,关闭Socket

服务器端

①创建ServerSocket对象,绑定监听端口

②通过accept()方法监听客户端请求

③建立连接后通过输入流读取客户端发送的信息

④通过输出流向客户端发送响应信息

⑤关闭输入输出流,关闭Socket

2.使用Socket发送Object

由于绘画板需要频繁的互通消息,并且每个消息可能不是简单的一个String,int可以满足的,所以我们需要发送和接受Object来实现同步绘画板,要注意以下几点:

①传送的Obj首先需要一个普通的对象类,由于需要序列化这个对象以便在网络上传输,所以实现java.io.Serializable接口就是必不可少;

②手机端和PC端存放所有实现了Serializable接口的Object类的包命必须相同,否则会通讯过程中会找不到相应的类;

③使用ObjectOutputStream,ObjectInputStream来读取和发送对象,发送完成调用flash()方法;

三.项目中如何建立通讯

有了以上对Sokcet发送建立连接和发送对象的基本了解,我们来看下在项目中如何进行adroid端和PC端的通讯;

1.首先定义继承自Serializable接口的类,并且构造方法接收一个枚举和一个对象,这样子在通讯时,即可根据枚举判断当前Android和PC端互通的消息类型,例如当前是画线POINT的操作还是关于命令COMMAND例如redo,undo的操作,然后根据不同的操作将对象转换成相应的类型,从中提取出所需信息即可,例如发送POINT枚举,收到此消息后将对象强制转换后提取X,Y坐标来完成绘制;

package com.rock.drawboard.module;

import java.io.Serializable;

public class DataPackage implements Serializable {
   
    public enum DataType {LOGIN,POINT,COMMAND,COLOR,STROKE}

    private DataType type;
    private Object data;

    public DataPackage(DataType type) {
        this(type, null);
    }

    public DataPackage(DataType type, Object data) {
        this.type = type;
        this.data = data;
    }

    public DataType getType() {
        return type;
    }

    public Object getData() {
        return data;
    }
}

用来画线的Point类

package com.rock.drawboard.module;

import java.io.Console;
import java.io.Serializable;
public class Point implements
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值