1. 程式人生 > >個人andriod實習小作品,個人聯網筆記本

個人andriod實習小作品,個人聯網筆記本

register close operation 是否 ready cas 工作 text str

個人聯網筆記本

個人信息:就讀於燕大本科軟件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實習小作品,個人聯網筆記本