📄 server.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */import javax.microedition.lcdui.*;import java.io.*;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.util.Vector;import javax.bluetooth.DiscoveryAgent;import javax.bluetooth.LocalDevice;import javax.microedition.io.Connector;import javax.microedition.io.StreamConnection;import javax.microedition.io.StreamConnectionNotifier;public class Server implements Runnable { private Connection connection; private LocalDevice local = null; private ClientProcessor processor; private DataOutputStream dos; private boolean isClosed = false; private boolean isOut = false; private StreamConnectionNotifier notifier; private String message = null; // private StreamConnection conn1; private String connectionURL = "btspp://localhost:F0E0D0C0B0A000908070605040302010;" + "authenticate=false;encrypt=false;name=FIR Server"; private Vector queue = new Vector(); private Thread accepterThread; //i add DataInputStream dis = null; public Server(Connection connection) { this.connection = connection; } public void start() { //System.out.println("Server start"); accepterThread = new Thread(this); accepterThread.setPriority(9); accepterThread.start(); } public void run() { boolean isBTReady = false; try { local = LocalDevice.getLocalDevice(); local.setDiscoverable(DiscoveryAgent.GIAC); } catch (Exception e) { System.out.println("Can't set discoverable mode..."); } try { notifier = (StreamConnectionNotifier) Connector.open(connectionURL); //System.out.println("server is opening"); isBTReady = true; } catch (Exception e) { System.err.println("Can't initialize bluetooth: " + e); } // connection.completeInitialization(isBTReady); if (!isBTReady) { return; } processor = new ClientProcessor(); while (!isClosed) { StreamConnection conn = null; try { conn = notifier.acceptAndOpen(); } catch (IOException e) { //continue; } processor.addConnection(conn); // conn1 = conn; } } public void sendMessage(String message) { this.message = message; try { dos.writeUTF(message); dos.flush(); //dos.close(); } catch (IOException e) { } } private void processConnection(StreamConnection conn) { try { dos = conn.openDataOutputStream(); } catch (Exception e) { } readInputString(conn); } private void readInputString(StreamConnection conn) { String message1 = null; try { dis = conn.openDataInputStream(); message1 = dis.readUTF(); //dis.close(); connection.receiveMessage(message1); } catch (Exception e) { e.printStackTrace(); } } private class ClientProcessor implements Runnable { private Thread processorThread; private Vector queue = new Vector(); private boolean isOk = true; private StreamConnection conn; ClientProcessor() { processorThread = new Thread(this); processorThread.setPriority(7); processorThread.start(); //System.out.println("client"); } public void run() { while (!isClosed) { synchronized (this) { if (queue.size() == 0) { try { wait(); } catch (InterruptedException e) { System.err.println("Unexpected exception: " + e); destroy(false); return; } } } if (isClosed) { return; } conn = (StreamConnection) queue.firstElement(); queue.removeElementAt(0); processConnection(conn); } } void addConnection(StreamConnection conn) { synchronized (this) { queue.addElement(conn); notify(); } } public void destroy(boolean needJoin) { StreamConnection conn; synchronized (this) { notify(); } while (queue.size() != 0) { conn = (StreamConnection) queue.firstElement(); queue.removeElementAt(0); try { if(conn!=null)conn.close(); } catch (IOException e) { e.printStackTrace(); } } try { processorThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } try { if(dos!=null)dos.close(); if(dis!=null)dis.close(); } catch (IOException ex) { ex.printStackTrace(); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -