pc上,window系统,可以用java编写蓝牙socket程序么

pc上,window系统,可以用java编写蓝牙socket程序么,第1张

Java对这个模型的支持有很多种芦盯携Api.而这里我只想介绍有关Socket的编程接口.对于Java而言已经简化了Socket的编程接口.首先我们来讨论有关提供固定位置的服务方是如何建立的.Java提供了ServerSocket来对其进行支持.事实上当你创建该类的一个实力对象并提供一个端口资源你就建立了一个固定位置可以让其他计算机来访问你.

Java代码

ServerSocket server=new ServerSocket(6789)

这里稍微要注意的是端口的分配必须是唯一的.因为端口是为了唯一标识每台计算机唯一服务的.另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的.好了.我们有了固定位置.现在所需要的就是一根连接线了.该连接线由客户方首先提出要求.因此Java同样提供了一个Socket对象来对其进行支持.只要客户方创建一个Socket的实例对象进行支持就可以了.

Java代码

Socket client=new Socket(InetAddress.getLocalHost(),5678)

客户机必须知道有关服务器的IP地址.对于着一点Java也提供了一个相关的类InetAddress 该对象的实例必须通过它的静态方法来提供.它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法.

好了.上面的方法基本可以建立一条连线则皮让两台计算机相互交流了.可是数据是如陪伏何传输的呢?事实上I/O *** 作总是和网络编程息息相关的.因为底层的网络是继续数据的.除非远程调用,处理问题的核心在执行上.否则数据的交互还是依赖于IO *** 作的.所以你也必须导入java.io这个包.java的IO *** 作也不复杂.它提供了针对于字节流和Unicode的读者和写者,然后也提供了一个缓冲用于数据的读写.

Java代码

BufferedReader in=

new BufferedReader(new InputStreamReader(server.getInputStream()))

PrintWriter out=new PrintWriter(server.getOutputStream())

上面两句就是建立缓冲并把原始的字节流转变为Unicode可以 *** 作.而原始的字节流来源于Socket的两个方法.getInputStream()和getOutputStream()方.分别用来得到输入和输出.那么现在有了基本的模型和基本的 *** 作工具.我们可以做一个简单的Socket例程了.

服务方:

Java代码

import java.io.*

import java.net.*

public class MyServer {

public static void main(String[] args) throws IOException{

ServerSocket server=new ServerSocket(5678)

Socket client=server.accept()

BufferedReader in=

new BufferedReader(new InputStreamReader(client.getInputStream()))

PrintWriter out=new PrintWriter(client.getOutputStream())

while(true){

String str=in.readLine()

System.out.println(str)

out.println("has receive....")

out.flush()

if(str.equals("end"))

break

}

client.close()

}

}

这个程序的主要目的在于服务器不断接收客户机所写入的信息只到.客户机发送"End"字符串就退出程序.并且服务器也会做出"Receive"为回应.告知客户机已接收到消息.

客户机代码:

Java代码

import java.net.*

import java.io.*

public class Client{

static Socket server

public static void main(String[] args)throws Exception{

server=new Socket(InetAddress.getLocalHost(),5678)

BufferedReader in=

new BufferedReader(new InputStreamReader(server.getInputStream()))

PrintWriter out=new PrintWriter(server.getOutputStream())

BufferedReader wt=new BufferedReader(new InputStreamReader(System.in))

while(true){

String str=wt.readLine()

out.println(str)

out.flush()

if(str.equals("end")){

break

}

System.out.println(in.readLine())

}

server.close()

}

}

客户机代码则是接受客户键盘输入,并把该信息输出,然后输出"End"用来做退出标识.

这个程序只是简单的两台计算机之间的通讯.如果是多个客户同时访问一个服务器呢?你可以试着再运行一个客户端,结果是会抛出异常的.那么多个客户端如何实现呢?

其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身.而服务器通过accept方法就是同意和客户建立通讯.这样当客户建立Socket的同时.服务器也会使用这一根连线来先后通讯.那么既然如此只要我们存在多条连线就可以了.那么我们的程序可以变为如下:

服务器:

Java代码

import java.io.*

import java.net.*

public class MyServer {

public static void main(String[] args) throws IOException{

ServerSocket server=new ServerSocket(5678)

while(true){

Socket client=server.accept()

BufferedReader in=

new BufferedReader(new InputStreamReader(client.getInputStream()))

PrintWriter out=new PrintWriter(client.getOutputStream())

while(true){

String str=in.readLine()

System.out.println(str)

out.println("has receive....")

out.flush()

if(str.equals("end"))

break

}

client.close()

}

}

}

这里仅仅只是加了一个外层的While循环.这个循环的目的就是当一个客户进来就为它分配一个Socket直到这个客户完成一次和服务器的交互,这里也就是接受到客户的"End"消息.那么现在就实现了多客户之间的交互了.但是.问题又来了.这样做虽然解决了多客户,可是是排队执行的.也就是说当一个客户和服务器完成一次通讯之后下一个客户才可以进来和服务器交互.无法做到同时服务.那么要如何才能同时达到既能相互之间交流又能同时交流呢?很显然这是一个并行执行的问题了.所以线程是最好的解决方案.

那么下面的问题是如何使用线程.首先要做的事情是创建线程并使得其可以和网络连线取得联系.然后由线程来执行刚才的 *** 作.要创建线程要么直接继承Thread要么实现Runnable接口,要建立和Socket的联系只要传递引用就可以了.而要执行线程就必须重写run方法.而run方法所做的事情.就是刚才单线程版本main所做的事情.因此我们的程序变成了这样:

Java代码

import java.net.*

import java.io.*

public class MultiUser extends Thread{

private Socket client

public MultiUser(Socket c){

this.client=c

}

public void run(){

try{

BufferedReader in=

new BufferedReader(new InputStreamReader(client.getInputStream()))

PrintWriter out=new PrintWriter(client.getOutputStream())

//Mutil User but can't parallel

while(true){

String str=in.readLine()

System.out.println(str)

out.println("has receive....")

out.flush()

if(str.equals("end"))

break

}

client.close()

}catch(IOException ex){

}finally{

}

}

public static void main(String[] args)throws IOException{

ServerSocket server=new ServerSocket(5678)

while(true){

//transfer location change Single User or Multi User

MultiUser mu=new MultiUser(server.accept())

mu.start()

}

}

}

我的类直接从Thread类继承了下来.并且通过构造函数传递引用和客户Socket建立了联系.这样每个线程就有了.一个通讯管道.同样我们可以填写run方法.把之前的 *** 作交给线程来完成.这样多客户并行的Socket就建立起来了.

1、打开Windows *** 作系统中的“控制面板”,然后打开“设备和打印机”。

然后点击“添加设备”,然后Windows将搜索周围的蓝牙设备并进行配置州袜早。需要注意的是,在点击添加设备之前,需要打开自己手机的蓝牙功能,否则计算机将无法搜索到手机的蓝牙设施。

2、然后Windows将会自动搜索到册雀附近的蓝牙设备,并将出现的蓝牙设备显示在的设备列表中,从图片中可以看到,Windows已经搜索到我们的蓝牙设备了,那么选择该手机设备,并点击“下一步”。

3、在接下来的步骤中,计算机将尝试与手机蓝牙设备进行配对连接,因此这个时候要注意自己手机的蓝牙配对提示好穗信息,然后在手机上先确认与电脑进行配对连接,然后在电脑上点击确定进行最终的配对。

4、接下来,如果电脑和手机的配对密钥一致的话,电脑和手机就成功建立了蓝牙连接,但是由于手机和电脑是第一次建立连接,因此 *** 作系统要进行驱动程序文件的安装,以及蓝牙的服务的启动工作。

5、驱动程序安装完成之后,蓝牙设备也就成功建立连接了,接下来,与电脑连接的蓝牙设备将会自动d出程序主界面,可以在这里实现文件的传输以及音频文件的播放等功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12429932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存