个人联网笔记本

个人信息:就读于燕大本科软件project专业 眼下大四;

本人博客:google搜索“cqs_2012”就可以;

个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;

编程语言:java ;

编程坏境:Windows 7 专业版 x64;

编程工具:jdk,eclipse,AVD;

制图工具:office 2010 powerpoint;

硬件信息:7G-3 笔记本;

引言

个人第一部联网andriod作品诞生,andriod生涯里程碑的出现。

主要技术点

通信socket技术。使用多线程通信。

在socket使用中,使用一次打开一次,关闭一次,传输数据一去一回。

socket与应用程序主线程的切换;

对主线程进行枷锁。数据传送完后,在socket线程里对主线程的唤醒,防止主线程没有等待数据通信完成就開始运行。

对主线程设置锁;

// 线程锁(事实上就是定义一个全局变量,在myapplication(全局变量)中定义)

public static String loginThreadState = "off";

加锁操作

MyApplication.loginThreadState =“off”;

检查锁操作

// 推断当前线程是否唤醒

while(MyApplication.loginThreadState.equals("off"));

开锁以及唤醒操作

// 唤醒 login 进程

MyApplication.loginThreadState = "on";

MyApplication.loginThreadState.notify();

然后这样就能够实现通信了,而且能够等待通信返回来的数据,然后去处理。

个人笔记server端socket实现

import java.net.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*; import DBData.DataApplication;
import DBData.NoteBookClass;
import DBData.User;
import DBOperation.NoteDao;
import DBOperation.UserDao;
import DataChange.NoteChange; public class MyAppNoteBookInfor extends Thread
{
// 链接变量
private static int port;
private static ServerSocket serverSocket ;
static Socket server; private DataInputStream input;
private DataOutputStream output; static
{
try
{
// 设置服务器端口
port = 8899;
serverSocket = new ServerSocket(port);
}
catch(Exception e)
{
e.printStackTrace();
}
} public MyAppNoteBookInfor()throws Exception
{
// 成功启动
System.out.println("accept ready");
server = serverSocket.accept(); // 成功启动
System.out.println("accept start"); // 获取数据流
input = new DataInputStream(server.getInputStream());
output = new DataOutputStream(server.getOutputStream());
} // run 主函数
public void run()
{
try
{
// 接收数据
String commondData = getCommondData(); // 处理数据,并发送数据
if(commondData != null)
selectCommond( commondData ); server.close();
}
catch (Exception e)
{
// TODO: handle exception
e.printStackTrace();
}
} // 选择函数 not over 数据处理
public void selectCommond(String data)throws Exception
{
// 接收数据。处理
String formatdata[] = data.split( DataApplication.commondGetDataStyle ); // 选择操作命令
switch( Integer.parseInt(formatdata[0]))
{
// check
case DataApplication.commond_check_user:
{
// 数据转换
User user = new User();
user.setId( formatdata[1] );
user.setPwd( formatdata[2] ); // 数据处理
Boolean result = MyAppNoteBookServer.checkUser(user); // 转换格式
String senddata = result.toString();
// 发送数据
sendData(senddata);
}
break; // select-all
case DataApplication.commond_get_my_all_note:
{
// 数据处理
String userid = formatdata[1];
ArrayList<NoteBookClass> noteList = MyAppNoteBookServer.getUserNoteList(userid); String senddata = "null" ;
if(noteList != null && noteList.size() > 0)
// 数据转换
senddata = NoteChange.noteListToStringWithSendForSelect(noteList); // 发送数据
sendData(senddata);
}
break; // new - note
case DataApplication.commond_insert_note:
{
// 数据转换
NoteBookClass noteBookClass = NoteChange.stringToNoteBookWithGetForInsert(formatdata[1]);
// 数据处理
Integer result = MyAppNoteBookServer.insertNote(noteBookClass);
// 数据转换
String senddata = result.toString();
// 数据发送
sendData(senddata);
}
break; // new user
case DataApplication.commond_insert_user:
{
// 数据转换
User user = new User();
user.toUser(formatdata[1]); // 数据处理
Integer result = MyAppNoteBookServer.insertUser(user);
// 数据转换
String senddata = result.toString();
// 数据发送
sendData(senddata);
}
break; case DataApplication.commond_search_note_by_key:
{
// 转换数据
String[] keystStrings = NoteChange.dataToStringWithGetForSelectByKey(formatdata[1]);
String useridString = keystStrings[0];
String keywordString =keystStrings[1]; // 数据处理
ArrayList<NoteBookClass> noteList = MyAppNoteBookServer.getUserNoteListByKeywords(useridString,keywordString); // 数据转换
String senddata = "null" ;
if(noteList != null && noteList.size() > 0)
senddata = NoteChange.noteListToStringWithSendForSelect(noteList); // 发送数据
sendData(senddata);
}
break; case DataApplication.commond_alter_note:
{
// 转换数据
NoteBookClass noteBookClass = NoteChange.stringToNoteBookWithGetForAlter( formatdata[1] ); // 数据处理
MyAppNoteBookServer.AlterNoteBook(noteBookClass);
ArrayList<NoteBookClass> noteList = MyAppNoteBookServer.getUserNoteList(noteBookClass.getUserId()); String senddata = "null" ;
if(noteList != null && noteList.size() > 0)
// 数据转换
senddata = NoteChange.noteListToStringWithSendForSelect(noteList); // 发送数据
sendData(senddata);
}
break; case DataApplication.commond_delete_note:
{
// 获取并转换数据
int id = Integer.parseInt(formatdata[1]); // 处理数据
int result = MyAppNoteBookServer.DeleteNoteBookById(id); // 转换数据
String senddata = String.valueOf(result); // 发送数据
sendData(senddata); }
break;
} } // 发送信息函数
public void sendData(String data)
{
try
{
// 发送消息
output.writeUTF(data);
output.flush();
}
catch (Exception e)
{
e.printStackTrace();
}
} // 接收命令函数
public String getCommondData()
{
String data = null;
try
{
// 接收消息
data = input.readUTF(); }
catch (Exception e)
{
// TODO: handle exception
}
return data;
} // 主函数 main
public static void main(String args[]) throws Exception
{ MyAppNoteBookInfor myAppNoteBookInfor;
while(true)
{
myAppNoteBookInfor = new MyAppNoteBookInfor();
myAppNoteBookInfor.start();
} } }

个人clientsocket实现

package Thread;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket; import com.icss.myappnotebook.MyApplication; public class SocektThread extends Thread
{
// 设置链接server
private String ip = "120.6.72.65" ;
private int port = 8899 ; // 链接客户端程序 变量
private Socket clientSocket ; // 设置数据流
public DataInputStream input ;
public DataOutputStream output ; // 线程主函数
public void run()
{ try
{
// 链接server
clientSocket = new Socket(ip,port); // 获取server输入流
input = new DataInputStream(clientSocket.getInputStream()); // 获取server输入流
output = new DataOutputStream(clientSocket.getOutputStream()); switch (MyApplication.commond)
{ // check-核对username和password
case MyApplication.commond_check_user: // 发送数据 2点
output.writeUTF(MyApplication.senddata);
output.flush(); // 发送成功
System.out.println("send ok"); // 接收数据
MyApplication.getdata = input.readUTF(); // 唤醒 login 进程
MyApplication.loginThreadState = "on";
MyApplication.loginThreadState.notify(); break; // 获得全部notes
case MyApplication.commond_get_my_all_note:
// 发送数据 2点
output.writeUTF(MyApplication.senddata);
output.flush(); // 接收数据
MyApplication.getdata = input.readUTF(); // 唤醒 menu 线程
MyApplication.menuThreadState="on";
MyApplication.menuThreadState.notify(); break; case MyApplication.commond_insert_note:
// 发送数据
output.writeUTF(MyApplication.senddata);
output.flush(); // 接收数据
MyApplication.getdata = input.readUTF(); // 唤醒 new 线程
MyApplication.newNoteBookThreadState = "on";
MyApplication.newNoteBookThreadState.notify(); break;
case MyApplication.commond_insert_user:
// 发送数据
output.writeUTF(MyApplication.senddata);
output.flush(); // 接收数据
MyApplication.getdata = input.readUTF(); // 唤醒 register 线程
MyApplication.registerUserThreadState = "on";
MyApplication.registerUserThreadState.notify();
break; case MyApplication.commond_search_note_by_key:
// 发送数据
output.writeUTF(MyApplication.senddata);
output.flush(); // 接收数据
MyApplication.getdata = input.readUTF(); // 唤醒 search 线程
MyApplication.searchNoteBookThreadState = "on";
MyApplication.searchNoteBookThreadState.notify();
break; case MyApplication.commond_alter_note:
// 发送数据
output.writeUTF(MyApplication.senddata);
output.flush(); // 接收数据
MyApplication.getdata = input.readUTF(); // 唤醒 show one notebook 线程
MyApplication.showOneNoteThreadState = "on";
MyApplication.showOneNoteThreadState.notify();
break;
case MyApplication.commond_delete_note:
// 发送数据
output.writeUTF(MyApplication.senddata);
output.flush(); // 接收数据
MyApplication.getdata = input.readUTF(); // 唤醒 show one notebook 线程
MyApplication.openAllThreadState = "on";
MyApplication.openAllThreadState.notify();
break;
default:
break;
} clientSocket.close(); }
catch(Exception e)
{
e.printStackTrace();
} } }

希望对于想实现通信的好友有帮助,谢谢大家

个人andriod实习小作品,个人联网笔记本的更多相关文章

  1. Vue.js起手式+Vue小作品实战

    本文是小羊根据Vue.js文档进行解读的第一篇文章,主要内容涵盖Vue.js的基础部分的知识的,文章顺序基本按照官方文档的顺序,每个知识点现附上代码,然后根据代码给予个人的一些理解,最后还放上在线编辑 ...

  2. 分享一个Unity3D小作品,源码地址已公布在文章开头!

    Update:回复量有点大,楼主工作期间可能无暇向童鞋们发送源码,为了不让童鞋们久等,现公布源码地址.  链接: http://pan.baidu.com/s/1sjpYW4d 密码: zhp9 请注 ...

  3. NLog类库的使用探索——认识配置+实习小感悟

    1 写在前面 1.1 为什么学了软件 1.高考失败,分数不高,不能随心所欲 2.农村孩子,学点技术,将来有口饭吃 3.有科技含量,想玩电脑(那个时候是这么想的,那个时候觉得学计算机就是玩电脑) 1.2 ...

  4. 我的一个小作品 android App ---校园资讯助手

        软件主界面采用Fragment+ViewPager组成.在点开后将会自动对学校新闻页面使用URl类来抓取,然后对网页中的信息提取,使用WebView来loadData在主界面上面显示, 为了使 ...

  5. 微信小程序随笔。笔记本忘家里了

    所有ui组件都有的共有属性id.class.style.hidden.data-*.bind* / catch*.

  6. JavDroider的作品展示

    好久没有写博客了,很懊悔,尽管说实习和项目那边的任务有点多,可是我想每天抽出时间出来写一篇文章总结一下当天所习所得并不困难! 好了,今天以一篇个人作品介绍来又一次开启我的博客~ 实习单位的门户站点 一 ...

  7. UI设计:C4D作品案例分享

    中文名4D电影,外文名CINEMA 4D,研发公司为德国Maxon Computer,特点为极高的运算速度和强大的渲染插件,使用在电影<毁灭战士>.<阿凡达>中,获得贸易展中最 ...

  8. 微信小程序开发 [00] 写在前面的话,疯狂唠唠

    我总是喜欢在写东西之前唠唠嗑,按照惯例会在博文的开篇写这么一段"写在前面的话",这次却为了这个唠嗑单独开了一篇文,大概预想着要胡说八道的话有点多. 前段时间突然对小程序来了兴趣,说 ...

  9. 「小程序JAVA实战」小程序注册与后端联调(35)

    转自:https://idig8.com/2018/09/01/xiaochengxujavashizhanxiaochengxuzhuceyuhouduanliandiao35/ 小程序的后端spr ...

随机推荐

  1. UVALive 6663 Count the Regions 离散+bfs染色_(:зゝ∠)_

    题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=4675">点击打开链接 gg.. ...

  2. JAVA项目中公布WebService服务——简单实例

    1.在Java项目中公布一个WebService服务: 怎样公布? --JDK1.6中JAX-WS规范定义了怎样公布一个WebService服务. (1)用jdk1.6.0_21以后的版本号公布. ( ...

  3. SOA概念具体解释

    1.概述 1.1基本定义 SOA(Service-Oriented Architecture)既面向服务的体系结构,是一个组件模型.它将应用程序猿的不同功能可是(称为服务)通过定义良好的接口联系起来. ...

  4. iOS9中,swift判断相机,相册权限,选取图片为头像

    在iOS7以后要打开手机摄像头或者相册的话都需要权限,在iOS9中更是更新了相册相关api的调用 首先新建一个swift工程,在SB中放上一个按钮,并在viewController中拖出点击事件 ok ...

  5. Qt-信号和槽-多对多

    前言:介绍1对多,多对1以及多对多的案例. 一.1对多 演示内容:在QLineEdit输入时,同步label,text browser以及调试输出板同步显示. 1.1 新建工程 1.2 添加部件 拖入 ...

  6. 异步编程(二)基于事件的异步编程模式 (EAP)

    一.引言 在上一个专题中为大家介绍了.NET 1.0中提出来的异步编程模式——APM,虽然APM为我们实现异步编程提供了一定的支持,同时它也存在着一些明显的问题——不支持对异步操作的取消和没有提供对进 ...

  7. JS进阶 - 浏览器工作原理

    一.浏览器的结构 浏览器的主要组件为: 用户界面 - 包括地址栏.前进/后退按钮.书签菜单等.除了浏览器主窗口(显示页面),其他部分都属于用户界面. 浏览器引擎 - 在用户界面和渲染引擎之间传送指令. ...

  8. ZBrush中如何做不同图案的遮罩

    ZBrush®软件中不仅可以创建矩形遮罩还可以创建有图案的遮罩,且是非常简单有效的,那么究竟怎样做出神奇的效果,本文将为您详细讲解. 有关反转遮罩.清除遮罩的详细内容,请点击:ZBrush中如何反选遮 ...

  9. W3c盒子模型+IE盒子模型+box-sizing属性

    1.盒子模型有两种,标准盒模型和IE盒模型,其中W3C标准的盒模型就是在网页的顶部加上 DOCTYPE 声明. (1)W3C标准的盒模型 W3C盒子模型包括4部分:margin,border,padd ...

  10. 《Exception》第八次团队作业:Alpha冲刺(第三天)

      一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.掌握软件测试基础技术.2.学习迭代式增 ...