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

 
/**
 * 
 * 
@author 梧州学院 04计本2班 罗功武
 * date: 08/02/27
 
*/


package  chat;

import  java.io.DataInputStream;
import  java.io.DataOutputStream;
import  java.io.IOException;
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  PairChatRoomServer  extends  Form  implements   Runnable, CommandListener  {
    
/*用户召娱乐妮称*/
    
private String userName;
    
/*客服端用户娱乐妮称*/
    
private String friendName;
    
/*娱乐平台主类*/
    
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 boolean isNoExit = true;
    
//是否是第一次接收数据
    private boolean isFirstAccept = true;
    
//服务链接器
    StreamConnectionNotifier server = null;
    
//服务器服务记录
    ServiceRecord record=null;
    
//数据输入流
    private DataInputStream dis = null;
    
//数据输出流
    private DataOutputStream dos = null;
    
/**
     * 构造方法
     * 完成双人聊天室窗口的初使化
     * 
@param midlet
     * 
@param mainMenu
     * 
@param name
     
*/

    
public PairChatRoomServer(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 commandAction(Command cmd, Displayable d) {
        
if (cmd == cmdExit) {
            
/*发送退出信息*/
            String str 
= "exit";
            
new sendThread(str).start();
            isRunning 
= false;
            
try {
                Thread.sleep(
1000);
            }
 catch (InterruptedException e) {
                
            }

            close();
            flatMainMIDlet.showFlatMenu();
        }
 else if(cmd == cmdSend) {
            String str 
= tfData.getString();
            
//显示发送的消息
            insert(size()-1,new StringItem("","我说: " + str + " "));
            
/*发送数据,新建发送数据线程*/
            
new sendThread(str).start();
            tfData.setString(
"");
        }

    }
 
    
    
/**
     * 服务器线程
     
*/

    
public void run() {
        
        isRunning 
= true;
        LocalDevice local 
= null;
        
try {
            
/*设置设备的发现模式,使设备处可发现*/
            local 
= LocalDevice.getLocalDevice();
            local.setDiscoverable(DiscoveryAgent.GIAC);
        }
 catch (BluetoothStateException e) {
            
return;
        }

        
try {
            
/*开启服务*/
            server 
= (StreamConnectionNotifier)Connector.open(
                
"btspp://localhost:11111111111111111111111111111111");
            
/*服务器服务记录*/
            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;
        }

        String message 
= "";
        
/*循环的为客户端服务*/
        
while(isRunning) {
            isNoExit 
= true;
            isFirstAccept 
= true;
            
try {
                local.setDiscoverable(DiscoveryAgent.GIAC);
            }
 catch (BluetoothStateException e1) {
                
// TODO Auto-generated catch block
                return;
            }

            StreamConnection conn 
= null;
            
try {
                
try {
                    
/*等待客户端的链接*/
                    conn 
= server.acceptAndOpen();
                    
/*客户端链接后,关闭发现模式*/
                    local.setDiscoverable(DiscoveryAgent.NOT_DISCOVERABLE);
                }
 catch (IOException e) {
                    
return;
                }

                
/*获得输入输出流*/
                dis 
= conn.openDataInputStream();
                dos 
= conn.openDataOutputStream();
                
/*接收数据*/
                
while(isRunning&&isNoExit) {
                    
/*等待用户发送数据*/
                    message 
= dis.readUTF();
                    
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;
                            dos
=null;
                        }

                        
else
                        
{
                            insert(size()
-1,new StringItem("",friendName + "说: " 
                                    
+ message + " "));
                        }

                                
                    }

                    
/*线程暂停*/
                    Thread.sleep(
1000);
                }

                
            }
 catch (Exception e) {
            }
 finally {
                
if (conn!=null{
                    
try {
                        conn.close();
                        conn 
= null;
                    }
catch (Exception e) {
                    }

                }

            }

        }

        close();
        
/*结束聊天*/
    }

    
    
/**
     * 关闭连接
     
*/

    
public void close() {
        
try {
            
/*关闭输入流*/
            
if (dis != null)
            
{
                dis.close();
                dis 
= null;
            }

            
/*关闭输出流*/
            
if (dos != null)
            
{
                dos.close();
                dos 
= null;
            }

            
/*关闭服务器*/
            
if (server != null)
            
{
                server.close();
                server 
= null;
            }

        }
 catch (Exception e) {
        }

    }

    
/*内部类-发送数据的线程*/
    
class sendThread extends Thread{
        
private String data = null;
        
public sendThread(String data){
            
this.data = data;
        }

        
public void run(){
            
if (dos == null{
                
return;
            }

            
try {
                dos.writeUTF(data);
                dos.flush();
            }
 catch (IOException e) {
                
return;
            }

        }

    }

}
// PairChatRoomServer.java文件结束

 

 

/**
 * Copyright@scholar_ii 
 * 
@author 梧州学院 04计本2班 罗功武
 * date 08/02/27
 
*/

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;
/**
* PairChatChatRoomClient 类
* 双人聊天室的客户端类
* 新健一个双人聊天室,并链双人聊天室接服务器
* 采用多线程的技术,客户端主线程,发送数据线程,
* 两种线程维护聊天室的运行
*/

public   class  PairChatRoomClient  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 PairChatRoomClient(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) {
                        
return;
                    }

                }

            }
.start();
            isRunning 
= false;
            
/*线程暂停*/
            
try {
                Thread.sleep(
1000);
            }
 catch (InterruptedException e) {
                
return;
            }

            close();
            flatMainMIDlet.showFlatMenu();
        }
 else if(command == cmdSend) {
            String str 
= tfData.getString();        
            
/*显示发送的消息*/
            insert(size()
-1new StringItem("","我说: " + str + " "));
            
/*发送数据的线程*/
            
new sendThread(str).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 
+ "的聊天室" + " "));
        
/*自动发客服端的用户名给服务器*/
        
/*把自己的用户名发送到服务器*/
        String str 
= userName;
        
new sendThread(str).start();
        
/*接收数据*/
        
while(isRunning) {
            
try {
                String message 
= dis.readUTF();
                
if(message.equals("exit"))
                
{
                    insert(size()
-1new StringItem("",friendName +
                            
"离开了聊天室"+ " "));
                    close();
                }

                
else
                
{
                    insert(size()
-1new StringItem("",friendName +
                            
"说: " + message + " "));
                }

                
                Thread.sleep(
1000);
            }
 catch (Exception e) {
                e.printStackTrace();
                
break;
            }

            
/*线程暂停*/
            
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) {
        }

    }

    
    
/*内部类-发送数据的线程*/
    
class sendThread extends Thread{
        
private String data = null;
        
public sendThread(String data){
            
this.data = data;
        }

        
public void run(){
            
if (dos == null{
                
return;
            }

            
try {
                dos.writeUTF(data);
                dos.flush();
            }
 catch (IOException e) {
                
return;
            }

        }

    }

}
// PairChatRoomClient.java文件结束
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
51单片机是一种非常常用的微控制器,被广泛应用于各种电子设备中。蓝牙技术是一种无线通信技术,可以实现设备之间的数据传输和通信。电子秤是一种根据物体重量进行测量的设备,可以应用于各种场合,例如超市、医院等。LCD1602是一种常见的液晶显示器,可以用来显示各种信息。 基于以上硬件的基础上,毕业设计可以考虑将51单片机、蓝牙模块、电子秤和LCD1602组合在一起,实现一个蓝牙电子秤系统。 首先,通过51单片机和LCD1602,可以实现将电子秤测量的重量信息显示在LCD1602上,方便用户观察。同时,通过三个按键,用户可以进行操作,例如切换不同的显示模式、调节显示亮度等。 其次,通过蓝牙模块,可以实现将电子秤测量的重量数据通过蓝牙传输给其他设备,例如手机、电脑等。这样,用户可以通过手机等设备接收和查看电子秤的重量信息,实现无线传输和远程监控。 毕业设计的关键是编写合适的程序代码,实现数据的采集、处理、显示和传输等功能。同时还需要进行硬件的连接和布局,确保各个模块之间的正常通信和工作。 总的来说,51单片机蓝牙电子秤LCD1602三按键蓝牙毕业设计,是一个结合了51单片机、蓝牙技术、电子秤和LCD1602的系统,能够实现电子秤重量的显示、远程传输和控制等功能。通过该设计,可以提高电子秤的使用便利性和智能化水平。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值