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(InetAddressgetLocalHost(),5678);
客户机必须知道有关服务器的IP地址对于着一点Java也提供了一个相关的类InetAddress 该对象的实例必须通过它的静态方法来提供它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法
好了上面的方法基本可以建立一条连线让两台计算机相互交流了可是数据是如何传输的呢事实上I/O *** 作总是和网络编程息息相关的因为底层的网络是继续数据的除非远程调用,处理问题的核心在执行上否则数据的交互还是依赖于IO *** 作的所以你也必须导入javaio这个包java的IO *** 作也不复杂它提供了针对于字节流和Unicode的读者和写者,然后也提供了一个缓冲用于数据的读写
Java代码
BufferedReader in=
new BufferedReader(new InputStreamReader(servergetInputStream()));
PrintWriter out=new PrintWriter(servergetOutputStream());
上面两句就是建立缓冲并把原始的字节流转变为Unicode可以 *** 作而原始的字节流来源于Socket的两个方法getInputStream()和getOutputStream()方分别用来得到输入和输出那么现在有了基本的模型和基本的 *** 作工具我们可以做一个简单的Socket例程了
服务方:
Java代码
import javaio;
import javanet;
public class MyServer {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);
Socket client=serveraccept();
BufferedReader in=
new BufferedReader(new InputStreamReader(clientgetInputStream()));
PrintWriter out=new PrintWriter(clientgetOutputStream());
while(true){
String str=inreadLine();
Systemoutprintln(str);
outprintln("has receive");
outflush();
if(strequals("end"))
break;
}
clientclose();
}
}
这个程序的主要目的在于服务器不断接收客户机所写入的信息只到客户机发送"End"字符串就退出程序并且服务器也会做出"Receive"为回应告知客户机已接收到消息
客户机代码:
Java代码
import javanet;
import javaio;
public class Client{
static Socket server;
public static void main(String[] args)throws Exception{
server=new Socket(InetAddressgetLocalHost(),5678);
BufferedReader in=
new BufferedReader(new InputStreamReader(servergetInputStream()));
PrintWriter out=new PrintWriter(servergetOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(Systemin));
while(true){
String str=wtreadLine();
outprintln(str);
outflush();
if(strequals("end")){
break;
}
Systemoutprintln(inreadLine());
}
serverclose();
}
}
客户机代码则是接受客户键盘输入,并把该信息输出,然后输出"End"用来做退出标识
这个程序只是简单的两台计算机之间的通讯如果是多个客户同时访问一个服务器呢你可以试着再运行一个客户端,结果是会抛出异常的那么多个客户端如何实现呢
其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身而服务器通过accept方法就是同意和客户建立通讯这样当客户建立Socket的同时服务器也会使用这一根连线来先后通讯那么既然如此只要我们存在多条连线就可以了那么我们的程序可以变为如下:
服务器:
Java代码
import javaio;
import javanet;
public class MyServer {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);
while(true){
Socket client=serveraccept();
BufferedReader in=
new BufferedReader(new InputStreamReader(clientgetInputStream()));
PrintWriter out=new PrintWriter(clientgetOutputStream());
while(true){
String str=inreadLine();
Systemoutprintln(str);
outprintln("has receive");
outflush();
if(strequals("end"))
break;
}
clientclose();
}
}
}
这里仅仅只是加了一个外层的While循环这个循环的目的就是当一个客户进来就为它分配一个Socket直到这个客户完成一次和服务器的交互,这里也就是接受到客户的"End"消息那么现在就实现了多客户之间的交互了但是问题又来了这样做虽然解决了多客户,可是是排队执行的也就是说当一个客户和服务器完成一次通讯之后下一个客户才可以进来和服务器交互无法做到同时服务那么要如何才能同时达到既能相互之间交流又能同时交流呢很显然这是一个并行执行的问题了所以线程是最好的解决方案
那么下面的问题是如何使用线程首先要做的事情是创建线程并使得其可以和网络连线取得联系然后由线程来执行刚才的 *** 作要创建线程要么直接继承Thread要么实现Runnable接口,要建立和Socket的联系只要传递引用就可以了而要执行线程就必须重写run方法而run方法所做的事情就是刚才单线程版本main所做的事情因此我们的程序变成了这样:
Java代码
import javanet;
import javaio;
public class MultiUser extends Thread{
private Socket client;
public MultiUser(Socket c){
thisclient=c;
}
public void run(){
try{
BufferedReader in=
new BufferedReader(new InputStreamReader(clientgetInputStream()));
PrintWriter out=new PrintWriter(clientgetOutputStream());
//Mutil User but can't parallel
while(true){
String str=inreadLine();
Systemoutprintln(str);
outprintln("has receive");
outflush();
if(strequals("end"))
break;
}
clientclose();
}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(serveraccept());
mustart();
}
}
}
我的类直接从Thread类继承了下来并且通过构造函数传递引用和客户Socket建立了联系这样每个线程就有了一个通讯管道同样我们可以填写run方法把之前的 *** 作交给线程来完成这样多客户并行的Socket就建立起来了
电脑可以编程C语言和JAVA等。
1C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
2Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等
如果只有自己电脑连,局域网不能连,那有可能是端口没有开放,请关闭防火墙试试,
如果你想让外网的电脑访问,那你得有固定IP,(公网IP 或者用花生壳,域名转发,并且路由器需要做映射)
1、Java本身做界面,用到Java Swing(事件+驱动方式)的知识(你可以下个java swing文档看看,一般两三天就可以看完做界面) java的基本知识就可以实现业务层,数据库 *** 作,最简单也是JDBC,也可以使用数据库 *** 作框架(ibatis/hibernate)
以上就是关于pc上,window系统,可以用java编写蓝牙socket程序么全部的内容,包括:pc上,window系统,可以用java编写蓝牙socket程序么、电脑上可以编写哪些程序实例、用JAVA写服务器端程序,只有自己的电脑可以连接上等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)