蓝牙休闲娱乐平台(毕业设计)第六部份
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文件结束
相关文章推荐
- 蓝牙休闲娱乐平台(毕业设计)第七部份
- 蓝牙休闲娱乐平台(毕业设计)第一部份
- 蓝牙休闲娱乐平台(毕业设计)第二部份
- 蓝牙休闲娱乐平台(毕业设计)第三部份
- 蓝牙休闲娱乐平台(毕业设计)第七部份
- 蓝牙休闲娱乐平台(毕业设计)第四部份
- 蓝牙休闲娱乐平台(毕业设计)第五部份
- 蓝牙休闲娱乐平台(毕业设计)第八部份
- 使用APICloud平台一周时间开发出休闲娱乐内容类APP
- Android平台蓝牙编程之蓝牙聊天分析(一)
- 休闲平台,何去何从?(2)
- 休闲娱乐精灵 是什么
- 大唐娱乐平台怎么申请做代理+Q【7133V5583】
- 亿贝娱乐平台客服+Q【7133V5583】
- 雅尚娱乐平台+Q【7133V5583】
- 至尊娱乐平台登录注册网址+Q【7133V5583】
- 金太阳娱乐平台怎么做代理+Q【7133V5583】
- A彩娱乐平台登录注册网址+Q【7133V5583】
- 星娱娱乐平台注册+Q【7133V5583】
- 利盈会娱乐平台官方网站+Q【7133V5583】