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

/**
 * 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()
-1new 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()
-1new StringItem("",friendName +
                            
"关闭了聊天室"+ " "));
                    dos 
= null;
                }

                
else
                
{
                    insert(size()
-1new 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文件结束


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值