个人联网笔记本

个人信息:就读于燕大本科软件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. 深入浅出CChart 每日一课——快乐高四第九课 于无声处,CChart内置功能介绍之数据存取篇

    笨笨长期以来一直使用Origin软件画图和处理数据,但Origin软件没有编程语言的接口.笨笨开发CChart的一个潜在的目标.是想实现Origin软件的功能.当然这是一个不可能达到的目标.Origi ...

  2. ym—— Android网络框架Volley(终极篇)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看Android网络框架Volley(体验篇)和 ...

  3. 51nod-1363: 最小公倍数之和

    [传送门:51nod-1363] 简要题意: 给出一个数n,求出1到n的数与n的最小公倍数的和 多组数据 题解: 理所当然推柿子 原题相当于求$\sum_{i=1}^{n}\frac{i*n}{gcd ...

  4. 英语发音规则---D字母

    英语发音规则---D字母 一.总结 一句话总结: 1.D发[d]音? doctor ['dɒktə] n. 医生:博士 bread [bred] n. 面包:生计 hand [hænd] n. 手,手 ...

  5. ORACLE RAC 11G 添加以及删除UNDO表空间

    在生产环境上,由于闪存盘的容量有限,现在需要将闪存盘里面的UNDO表空间,替换到非闪存的磁盘里面. 磁盘的使用情况如下: 表空间使用情况如下: RAC两个节点占用将近167G的空间. 操作步骤如下: ...

  6. Redis学习笔记(八) 基本命令:SortedSet操作

    原文链接:http://doc.redisfans.com/sorted_set/index.html SortedSet的数据结构类似于Set,不同的是Sorted中的每个成员都分配了一个值(Sco ...

  7. tomcat配置一个服务监听两个端口

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ...

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

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

  9. swift使用查阅资料备份3

    自主学习之RxSwift(二) -----flatMap https://blog.csdn.net/chelongfei/article/details/50995603 RxSwift 系列(九) ...

  10. Aspose.Cells基础使用方法整理

    Aspose.Cells 插件,将web端数据以excel形式导出到客户端. 相关文档: https://blog.csdn.net/djk8888/article/details/53065416 ...