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

个人联网笔记本

个人信息:就读于燕大本科软件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();
		}

	}

}

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

时间: 2024-10-13 11:54:35

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

把6月第一个小作品写好了注释,第二阶段开始

趁着升级加班,把6月第一个小作品写好了注释. 自己开始第二阶段,慢跑吧. 应用类(非研究类)进行数据分析或展现编程并不难,坚持+慢慢深入+我们身边注意观察大量的数据资源+一点思路,可以自主慢慢做下去. 当然,网络编程必须启动,因为有这个就可以平台化,而非为了分析写文章而已. 第一阶段小作品和2,3本可以的书籍已打包.

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

本文是小羊根据Vue.js文档进行解读的第一篇文章,主要内容涵盖Vue.js的基础部分的知识的,文章顺序基本按照官方文档的顺序,每个知识点现附上代码,然后根据代码给予个人的一些理解,最后还放上在线编辑的代码以供练习和测试之用:在最后,我参考SegmentFault上的一篇技博,对Vue进行初入的实战,目的是将新鲜学到的知识立即派上用场:如果你还是前端的小白,相信这篇文章可能会对产生一些帮助和引起思想的碰撞,因为大家的学习历程是相似的,遇到的困惑也有一定的共通性,如果文章出现谬误之处,欢迎各位童鞋

几个小作品展示

以下展示了几个小作品,点击    来开始 1. 移动鼠标,用绿色挡板击球 2. 点击键盘上的“左方向键 <--” 和 “右方向键-->” 试试看

分享一个Unity3D小作品,欢迎索取源码!

在一年多前知道了Unity这款游戏引擎.在得知她极大地简化游戏开发的难度并可以使用我最熟悉的C#开发后,便毅然决然地开始学习Unity3D.说来惭愧,期间,由于个人原因,学习断断续续,直到现在才有一个勉强拿的出手的小作品.这款小游戏是一款类似超级马里奥的冒险游戏,玩法简单明了不费脑. 游戏截图 菜单界面 查看最高分 设置游戏难度,主要是设置主角受攻击时的伤害 可以通过跳跃攻击小怪兽 匕首攻击 滑行越过障碍物 乘坐来回移动的平台去往目的地 你赢了!就这样! 操作键设置 在该项目中自定义了几个操作键

展示几个小作品

以下展示了几个小作品,点击    来开始 1. 这里画了花朵 2. 移动鼠标,用绿色挡板击球 3. 点击键盘上的 “左方向键 <--” 和 “右方向键-->” 试试看

NLog类库的使用探索(一)+实习小感悟

1 写在前面 1.1 为什么学了软件 1.高考失败,分数不高,不能随心所欲 2.农村孩子,学点技术,将来有口饭吃 3.有科技含量,想玩电脑(那个时候是这么想的,那个时候觉得学计算机就是玩电脑) 1.2 为什么选了C# 1.大一大二学了c,C++,大三分方向NET和JAVA,觉得C,C++,C#看着好看,读者顺,就选了. 2.大多数学习好点的学了JAVA,不想跟风选了C# 1.3  选择决定命运 本科时候winform,asp.net,WindowsPhone各学了半年,学的最好的还算是WP,只能

(六)node.js做的登录和上传图片的小作品

花了点时间做了一个小东西,希望对你们理解node.js有帮助!!! 服务器代码:server.js var http = require("http");  var url = require("url");  function start(route, handle) {    function onRequest(request, response) {      var postData = "";      var pathname = 

React学习 之 阶段性小作品(待办事项_已完成事项 CRUD)

(一)React demo 作品展示 (二)代码附详细解释 将此组件在app.js中引用即可,非常方便. import React,{Component} from 'react'; import '../assets/css/index.css'; class Todo extends Component{ constructor(props){ super(props); this.state = { list:[ { title:'起床', checked:false }, { title

[小作品][JS][JQuery]求两个字符串的最大公共串

算法大概描述就是,分别用两个字符串作为横坐标和纵坐标建一个矩阵,遇到横竖字符相同的时候把这点的值设成1,否则设成零,最后矩阵中最长的不为零的对角线就是最大子字串. 例如:   m a c h i a 0 1 0 0 0 b 0 0 0 0 0 m 1 0 0 0 0 a 0 1 0 0 0 c 0 0 1 0 0 这样有点问题:建完矩阵还要去找最长对角线,麻烦. 解决方案是:相等时不只把矩阵元素设为“1”,而是设成它左上角的元素值加一. 例如:   m a c h i a 0 1 0 0 0 b