个人andriod实习小作品,个人联网笔记本

来源:互联网 发布:阿里巴巴小二 淘宝天下 编辑:程序博客网 时间:2024/06/11 11:57

个人联网笔记本

个人信息:就读于燕大本科软件工程专业 目前大四;

本人博客: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();

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

个人笔记服务器端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 exceptione.printStackTrace();}}// 选择函数 not over 数据处理public void selectCommond(String data)throws Exception{// 接收数据,处理String formatdata[] = data.split( DataApplication.commondGetDataStyle );// 选择操作命令switch( Integer.parseInt(formatdata[0])){// checkcase 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-allcase 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 - notecase DataApplication.commond_insert_note:{// 数据转换NoteBookClass noteBookClass = NoteChange.stringToNoteBookWithGetForInsert(formatdata[1]);// 数据处理Integer result = MyAppNoteBookServer.insertNote(noteBookClass);// 数据转换String senddata = result.toString();// 数据发送sendData(senddata);}break;// new usercase 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;}// 主函数 mainpublic static void main(String args[]) throws Exception{MyAppNoteBookInfor myAppNoteBookInfor; while(true){myAppNoteBookInfor = new MyAppNoteBookInfor();myAppNoteBookInfor.start();}}}

个人客户端socket实现

package Thread;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.Socket;import com.icss.myappnotebook.MyApplication;public class SocektThread extends Thread{// 设置链接服务器private  String ip = "120.6.72.65" ;private  int port = 8899 ;// 链接客户端程序 变量private  Socket clientSocket ;// 设置数据流public  DataInputStream input ;public  DataOutputStream output ;// 线程主函数public void run(){try{// 链接服务器clientSocket = new Socket(ip,port);// 获取服务器输入流input = new DataInputStream(clientSocket.getInputStream());// 获取服务器输入流output = new DataOutputStream(clientSocket.getOutputStream());switch (MyApplication.commond) {// check-核对用户名和密码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;// 获得所有notescase 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();}}}

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



0 0
原创粉丝点击