个人联网笔记本

个人信息:就读于燕大本科软件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. 在iOS中求数组元素中最大数与最小数

    之前求数组中某个数中的最大值与最小值.还真一个个比較,后来看到这种方法后,我就醉了 NSArray *testArray = [NSArray arrayWithObjects:@"-2.0 ...

  2. asp.net website 单独编译某个页面,连带编译app_code

    选中某一个页面,然后右键build page

  3. 11.QT窗口布局切割

    int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show(); //左右分割 7 ...

  4. (转)IOS http请求的get 和 post的请求的区别

    从表面的意思看get 和 post的区别get就是获取数据,post就是发送数据.这个是误区.其实两者都可以的,在IOS向服务器发送请求里面可以带参数. 那么这些误区是怎么出现的呢?先看看一下对htt ...

  5. 常见问题处理之Emoji

    所谓Emoji就是一种在Unicode位于\u1F601-\u1F64F区段的字符.这个显然超过了目前常用的UTF-8字符集的编码范围\u0000-\uFFFF.Emoji表情随着IOS的普及和微信的 ...

  6. POJ 3020 Hungary

    一道建图题-- // by SiriusRen #include <cstdio> #include <cstring> using namespace std; #defin ...

  7. ES6 | ES6新语法 在编码实践中的应用

    本章探讨如何将 ES6 的新语法,运用到编码实践之中,与传统的 JavaScript 语法结合在一起,写出合理的.易于阅读和维护的代码. 多家公司和组织已经公开了它们的风格规范,本文的内容主要参考了  ...

  8. app专项测试

    本节为大家讲述app的专项测试——客户端性能测试.这个我也做了蛮久的了.在这里修改了一下本篇随笔. 首先我们了解一下什么是客户端的性能测试.性能测试相比大家都已经耳熟能详了,这个app的客户端性能测试 ...

  9. Python爬虫:爬取某网站关键词对应商品ID,且存入DB2数据库

    公司研发不给力,我就自己写了一个,专门爬关键词对应的商品ID. 其中还学会了用Python操作DB2数据库.Python发送邮件.写日志文件.处理浏览器访问限制. #!/usr/bin/python# ...

  10. mysqldump流程

    前几天看到群里在讨论mysqldump导致锁表的问题,为什么一个表已经dump完了还会被锁住?mysqldump里面到底是怎么处理的,为了解答这些问题,就来看看mysqldump.cc中的实现吧. 目 ...