您的位置:首页 > 其它

蓝牙休闲娱乐平台(毕业设计)第六部份

2008-03-08 22:23 423 查看



/** *//**


* Copyright@scholar_ii


* @author 梧州学院 04计本2班 罗功武


* date: 08/02/29


*/




package chat;




import java.io.DataInputStream;


import java.io.DataOutputStream;


import java.io.IOException;


import javax.microedition.io.Connector;


import javax.microedition.io.StreamConnection;


import javax.microedition.lcdui.Command;


import javax.microedition.lcdui.CommandListener;


import javax.microedition.lcdui.Displayable;


import javax.microedition.lcdui.Form;


import javax.microedition.lcdui.StringItem;


import javax.microedition.lcdui.TextField;


import javax.microedition.lcdui.Ticker;




import flat.FlatMainMIDlet;






/** *//**


* MultiChatChatRoomClient 类


* 多人聊天室的客户端类


* 新健一个多人聊天室,并链多人聊天室接服务器


* 采用多线程的技术,客户端主线程,发送数据线程,


* 两种线程维护聊天室的运行


*/


public class MultiChatRoomClient extends Form implements




Runnable, CommandListener ...{




/**//*用户娱乐妮称*/


private String userName = null;




/**//*服务器用户的娱妮称*/


private String friendName = null;




/**//*娱乐平台的主类*/


private FlatMainMIDlet flatMainMIDlet = null;




/**//*滚动条*/


static final Ticker ticker = new Ticker("我的聊天室,我做主^_^");




/**//*用于输入要发送的消息*/


private TextField tfData = new TextField("请输入发送的消息",


"",255,TextField.ANY);




private static final Command cmdExit = new Command("退出", Command.EXIT, 0);


private static final Command cmdSend = new Command("发送", Command.SCREEN, 1);






/**//*线程运行标志*/


private boolean isRunning = true;




/**//*链接字符串*/


private String connectURL = null;




/**//*链接流*/


private StreamConnection client = null;




/**//*数据输入流*/


private DataInputStream dis = null;




/**//*数据输出流*/


private DataOutputStream dos = null;




/** *//**


* 构造方法


* 完成客户端聊天室窗口的初使化


* @param connectURL


* @param flatMainMidlet


* @param chatRoomList


* @param userName


* @param friendName


*/


public MultiChatRoomClient(String connectURL, FlatMainMIDlet flatMainMidlet,




String userName, String friendName)...{




super("多人聊天室");


this.connectURL = connectURL;


this.flatMainMIDlet = flatMainMidlet;


this.userName = userName;


this.friendName = friendName;


setTicker(ticker);


append(tfData);


addCommand(cmdExit);


addCommand(cmdSend);


setCommandListener(this);


//开始服务器线程


new Thread(this).start();


}




public void commandAction(Command command, Displayable displayable) ...{




if (command == cmdExit) ...{




/**//*发送退出信息*/




new Thread() ...{




public void run() ...{




if (dos == null) ...{


return;


}


String str = "exit";




try ...{


dos.writeUTF(str);


dos.flush();




} catch (IOException e) ...{


}


}


}.start();


isRunning = false;




/**//*线程暂停*/




try ...{


Thread.sleep(1000);




} catch (InterruptedException e) ...{


return;


}


close();


flatMainMIDlet.showFlatMenu();




} else if(command == cmdSend) ...{




/**//*发送数据的线程*/




new Thread() ...{




public void run() ...{




if (dos == null) ...{


return;


}


String str = tfData.getString();




try ...{


dos.writeUTF(str);


dos.flush();




} catch (IOException e) ...{


return;


}


}


}.start();


tfData.setString("");


}




}




/** *//**


* 客服客聊天线程


*/




public void run() ...{




isRunning = true;




try ...{




/**//*链接服务器*/


client = (StreamConnection)Connector.open(connectURL);




/**//*获得输入输出流*/


dis = client.openDataInputStream();


dos = client.openDataOutputStream();






} catch (Exception e) ...{


return;


}


insert(size()-1, new StringItem("","^_^进入" +


friendName + "的聊天室" + " "));




/**//*把自己的用户名发送到服务器*/




new Thread() ...{




public void run() ...{




if (dos == null) ...{


return;


}


String str = userName;




try ...{


dos.writeUTF(str);


dos.flush();




} catch (IOException e) ...{


close();


return;


}


}


}.start();




/**//*接收数据*/




while(isRunning) ...{




try ...{


String message = dis.readUTF();


if(message.equals("exit"))




...{


insert(size()-1, new StringItem("",friendName +


"关闭了聊天室"+ " "));


dos = null;


}


else




...{


insert(size()-1, new StringItem("",


message + " "));


}




Thread.sleep(1000);




} catch (Exception e) ...{


close();


return;


}




/**//*线程暂停*/




try ...{


Thread.sleep(1000);




} catch (InterruptedException e) ...{


}


}


close();




}






/** *//**


* 关闭连接


*/




public void close() ...{




try ...{




/**//*关闭输入流*/


if (dis != null)




...{


dis.close();


dis = null;


}




/**//*关闭输出流*/


if (dos != null)




...{


dos.close();


dos = null;


}




/**//*关闭客户端链接流*/


if (client != null)




...{


client.close();


client = null;


}




} catch (Exception e) ...{


}


}


}//MultiChatRoomClient.java类文件结束






/** *//**


* Copyright@scholar_ii


* @author 梧州学院 04计本2班 罗功武


* date 08/02/28


*/


package chat;




import java.io.DataInputStream;


import java.io.DataOutputStream;


import java.io.IOException;


import java.util.Vector;


import javax.bluetooth.BluetoothStateException;


import javax.bluetooth.DataElement;


import javax.bluetooth.DiscoveryAgent;


import javax.bluetooth.LocalDevice;


import javax.bluetooth.ServiceRecord;


import javax.microedition.io.Connector;


import javax.microedition.io.StreamConnection;


import javax.microedition.io.StreamConnectionNotifier;


import javax.microedition.lcdui.Command;


import javax.microedition.lcdui.CommandListener;


import javax.microedition.lcdui.Displayable;


import javax.microedition.lcdui.Form;


import javax.microedition.lcdui.StringItem;


import javax.microedition.lcdui.TextField;


import javax.microedition.lcdui.Ticker;


import flat.FlatMainMIDlet;






/** *//**


* PairChatChatRoomServer 类


* 多人聊天室的服务器类


* 新健一个多人聊天室,并等待用户的接着


* 采用多线程的技术每次接收与发送数据,响应用户的操作为三个不同的线程


*/




public class MultiChatRoomServer extends Form implements Runnable, CommandListener ...{




/**//*用户召娱乐妮称*/


private String userName;




/**//*娱乐平台主类*/


private FlatMainMIDlet flatMainMIDlet;




/**//*窗口滚动条*/


private static final Ticker ticker = new Ticker("我的聊天室,我做主^_^");


//用于输入要发送的消息


private TextField tfData = new TextField("请输入发送的消息",


"",255,TextField.ANY);




private static final Command cmdExit = new Command("退出", Command.EXIT, 0);


private static final Command cmdSend = new Command("发送", Command.SCREEN, 1);




/**//*线程运行标志*/


private boolean isRunning = true;




/**//*服务器开启器*/


private StreamConnectionNotifier server = null;




/**//*数据输出流列表*/


private Vector dosList = null;




/**//*MultiChatServerThread列表*/


private Vector serverThreadList = null;




/** *//**


* 构造方法


* 完成多人聊天窗口的初使化


* @param midlet


* @param mainMenu


* @param name


*/




public MultiChatRoomServer(FlatMainMIDlet midlet,String name) ...{




super("多人聊天室");


this.flatMainMIDlet = midlet;


this.userName = name;


setTicker(ticker);


append(tfData);


addCommand(cmdExit);


addCommand(cmdSend);


setCommandListener(this);


//开始服务器线程


new Thread(this).start();


}








public void run() ...{


isRunning = true;


dosList = new Vector();


serverThreadList = new Vector();


LocalDevice local = null;




try ...{




/**//*设置设备的发现模式,使设备处可发现*/


local = LocalDevice.getLocalDevice();


local.setDiscoverable(DiscoveryAgent.GIAC);




} catch (BluetoothStateException e) ...{


return;


}




try ...{




/**//*开启服务*/


server = (StreamConnectionNotifier)Connector.open(


"btspp://localhost:22222222222222222222222222222222");




/**//*服务器服务记录*/


ServiceRecord record = local.getRecord(server);




/**//*自定义服务记录属性*/


DataElement elm = null;


elm = new DataElement(DataElement.STRING, userName);


record.setAttributeValue(0x1234, elm);


elm = null;


elm = new DataElement(DataElement.STRING, "SCHOLAR_II");


record.setAttributeValue(0x1235, elm);




/**//*更新服务记录属性*/


local.updateRecord(record);




} catch (IOException e) ...{


return;


}


while(isRunning)




...{


StreamConnection conn = null;




try ...{




/**//*等待客户端的链接*/


conn = server.acceptAndOpen();




} catch (IOException e) ...{


return;


}




/**//*聊天服务线程*/


MultiChatServerThread serverThread = new MultiChatServerThread(conn);


serverThreadList.addElement(serverThread);


new Thread(serverThread).start();




try ...{


Thread.sleep(2000);




} catch (InterruptedException e) ...{




}




}




}






public void commandAction(Command command, Displayable displayable) ...{




if (command == cmdExit) ...{




/**//*发送退出信息*/




new Thread() ...{




public void run() ...{




if (serverThreadList.size() < 1) ...{


return;


}


String str = "exit";




try ...{


for(int i=0; i<serverThreadList.size() ;i++)




...{


((MultiChatServerThread)serverThreadList.


elementAt(i)).dos.writeUTF(str);


((MultiChatServerThread)serverThreadList.


elementAt(i)).dos.flush();


}




} catch (IOException e) ...{


}


}


}.start();


isRunning = false;




try ...{


Thread.sleep(1000);




} catch (InterruptedException e) ...{




}


for(int i=0; i<serverThreadList.size() ;i++)




...{


((MultiChatServerThread)serverThreadList.


elementAt(i)).close();


((MultiChatServerThread)serverThreadList.


elementAt(i)).close();


}


flatMainMIDlet.showFlatMenu();




} else if(command == cmdSend) ...{


//发送数据,新建发送数据线程




new Thread() ...{




public void run() ...{




if (serverThreadList.size() < 1) ...{


return;


}


String str = tfData.getString();




try ...{


for(int i=0; i<serverThreadList.size() ;i++)




...{


((MultiChatServerThread)serverThreadList.


elementAt(i)).dos.writeUTF(userName


+ " 说: "+ str);


((MultiChatServerThread)serverThreadList.


elementAt(i)).dos.flush();




}




} catch (IOException e) ...{




}


//显示发送的消息


insert(size()-1,new StringItem("","我说: " + str + " "));


tfData.setString("");


}


}.start();


}




}






class MultiChatServerThread implements Runnable...{






/**//*是否是第一次接收数据*/


private boolean isFirstAccept = true;




/**//*客户端是否退出*/


private boolean isNoExit = true;


private StreamConnection conn= null;


public DataOutputStream dos = null;


public DataInputStream dis = null;




/**//*客服端用户娱乐的妮称*/


public String friendName = null;




public MultiChatServerThread(StreamConnection conn)...{




this.conn = conn;


}






public void run() ...{






try ...{


dis = conn.openDataInputStream();


dos = conn.openDataOutputStream();




} catch (IOException e) ...{


close();


return;


}




dosList.addElement(dos);




String message = null;




/**//*接收数据*/




while(isRunning&&isNoExit) ...{




/**//*等待用户发送数据*/




try ...{


message = dis.readUTF();




} catch (IOException e1) ...{


close();


return;


}


if(isFirstAccept)




...{




/**//*第一接收客户端的数据,客户端的用户名*/


insert(size()-1,new StringItem("","^_^欢迎"


+ message + "进入我的聊天室" + " "));


friendName = message;


isFirstAccept = false;


}


else




...{ /**//*用户退出*/


if(message.equals("exit"))




...{


insert(size()-1,new StringItem("",


friendName + "退出我的聊天室" + " "));


isNoExit = false;


close();


}


else




...{


String str = new String(friendName + "说: "


+ message);


insert(size()-1,new StringItem("",str));




/**//*转发数据到其它客户端*/




try...{


for(int i= 0; i<serverThreadList.size(); i++)




...{


((MultiChatServerThread)serverThreadList.


elementAt(i)).dos.writeUTF(str);


((MultiChatServerThread)serverThreadList.


elementAt(i)).dos.flush();


}


}catch(IOException e)




...{


close();


return;


}


}




}




/**//*线程暂停*/




try ...{


Thread.sleep(1000);




} catch (InterruptedException e) ...{


e.printStackTrace();


}


}


}




private void close()




...{






try ...{




/**//*关闭输入流*/


if (dis != null)




...{


dis.close();


dis = null;


}




/**//*关闭输出流*/


if (dos != null)




...{


dos.close();


dos = null;


}




/**//*关闭服务器*/


if (conn != null)




...{


conn.close();


conn = null;


}




} catch (Exception e) ...{


}


}






}




}//MultiChatRoomServer.java文件结束





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息