个人联网笔记本

个人信息:就读于燕大本科软件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. POJ训练计划3422_Kaka&#39;s Matrix Travels(网络流/费用流)

    解题报告 题目传送门 题意: 从n×n的矩阵的左上角走到右下角,每次仅仅能向右和向下走,走到一个格子上加上格子的数,能够走k次.问最大的和是多少. 思路: 建图:每一个格子掰成两个点,分别叫" ...

  2. Java Secret: Using an enum to build a State machine(Java秘术:用枚举构建一个状态机)

    近期在读Hadoop#Yarn部分的源代码.读到状态机那一部分的时候,感到enmu的使用方法实在是太灵活了,在给并发编程网翻译一篇文章的时候,正好碰到一篇这种文章.就赶紧翻译下来,涨涨姿势. 原文链接 ...

  3. 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面

    (一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...

  4. Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10766053 之前用JakeWharton的开源框架ActionBarSherlock ...

  5. 17.QT键盘

    mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> 5 #include <Q ...

  6. 开发辅助 | 前端开发工程师对 UI设计、交互设计的认知

    1.UI 用户界面 UI:User Interfase 用户界面 UID:User Interfase Designer 用户界面设计师,多指移动 app 的界面设计: 2.一个合格的 UI 设计师, ...

  7. svn: E155017: Checksum mismatch while updating 校验错误的解决方法

    [10.3.53.53:/EMRCV5]# svn up svn: E155004: Working copy '/EMRCV5' locked. svn: E155004: '/EMRCV5' is ...

  8. input的radio根据value和name反向显示

    1.获取radio的值,是根据name设置一组单选框. 例如: <div id="sexBox"> <input type="radio" i ...

  9. [置顶] openHAB 体系结构与编程模型 (2) --- Web Application Servlet 源码结构

    || || || || || || demo.items Group All Group gGF (All) Group gFF (All) Group gC (All) Group Outdoor ...

  10. freeswitch 中文语音

    1.下载中文语音包 链接:https://pan.baidu.com/s/1UODvqj8NAQw7_CRatfl0kg 提取码:qwdn 创建目录 /usr/local/freeswitch/sou ...