最近学习java的通信处理,感觉并不容易,若文中出现差错,希望指正。
在网络中,最基础的通信即服务器与一个客户机之间的通信。
首先,创建服务器
ServerSocket server = new ServerSocket(port);
以上代码就实例化了一个服务器,其中参数port为端口号。每个机器都有0~65535端口,每个端口可供一个程序通信使用。通常情况下,我们建立的服务器应避免使用0~1024端口,它们默认是某些程序的端口。
创建好服务器,接下来服务器要做的事就是等待,一直到有人连接上这个服务器。这个等待过程也称为阻塞过程,代码如下:
Socket client = server.accept();
连接上服务器时,这个连接对象对服务器而言就是客户机了。
现在服务器与客户机连接上了,具备了两者之间相互通信的基本条件。现在利用输入输出流来传递两者之间要交流的信息。
InputStream instream = client.getInputStream();
OutputStream outstream = client.getOutputStream();
这个输入输出流是从连接对象中得到的。实际上,从逻辑上来看,客户机的输出流即服务器的输入流,同样,客户机的输入流即服务器的输出流。如果允许的话,我们也可以从服务器中得到输入输出流,但是ServerSocket这个类并没有提供得到输入输出流的方法。
现在想让客户连接上服务器时,客户机上显示“welcome”,可以利用以下代码实现:
String s = "welcome!";
byte[] data = s.getBytes();//字符串转换为字节流
outstream.write(data);//用输出对象写出数据
outstream.flush();//强制输出
这段代码产生的效果就像是将服务器的信息发送给客户机。但是,看这段代码时我感觉很奇怪,因为服务器是发出信息,所以按理来讲,输出对象应该是服务器的,但是这个输出对象outstream却是从客户机那里得到的。其实我这是把效果想当然地对应到它的过程中了,而这恰恰是错误的。这段代码的过程是这样的,在有客户机连上服务器时,客户机的输出流对象就把“welcome”写在客户机界面上。
接下来就是客户机发送消息给服务器。
//客户端向服务器发消息
int n = instream.read();
while(n != '%'){
//打印接收字符
System.out.print((char)n);
n = instream.read();
}
输入流对象读取方法read(),是一个字节一个字节读取,也就是在客户机没打一个字符,服务器就打印一个字符,所以要用到while循环,以上代码是当遇到“%”时停止接收,“%"在这里相当于结束字符。read()返回的是int型,只需在打印接收字符时将其转型为char即可。
想要实现客户机输入一行字符串之后再把信息发送给服务器的话,只需对 n = instream.read();这行代码稍加修改即可,关键的地方就是利用字符缓冲区StringBuffer,在遇到换行符时,将字符缓冲区中的字符组输出就行了。
最后,我们加入一个判断语句,输入某个字符或字符串,比如”END“,就将客户机关闭,执行代码:client.close();。
但是这个程序执行完后,服务器也关闭了。要让服务器不关闭,一个简单的办法就是在创建一个服务器后,将后面的代码都套在while(true){}中。这并非一个好方法,但不影响我们对服务器和客户机之间通信的测试。
不过,这里还有一个缺陷,就是服务器只能连接上一个客户机。我们可以用线程解决这个问题,写一个线程类只需将创建客户机之后的代码复制进去,并重写构造函数,使能传入参数Socket client。
这样就实现了一个比较基础的服务器和客户机之间的通信。
相关推荐
本课题是应用了计算机网络通信技术和JAVA网络编程的基础知识,以JAVA为平台,利用Eclipse开发工具,并使用SQL Server 2000管理数据库数据开发出的基于Socket的网络即时通信系统。(论文+源代码+开题报告)
实用线程+循环完成了客户端与服务端的简单通信(服务端为本机),服务器端可以向客户端发送消息,客户端也可以向服务器端发送消息。你一句我一句实现对话,通过检测内容是否为OVER结束对话。
最基础的java socket通信,客户端服务端之间传送javabean对象
完整版java基础入门教程由浅入深讲解 Java语言编程基础 第14章 网络通信(共76页).ppt 完整版java基础入门教程由浅入深讲解 Java语言编程基础 第15章 数据库访问(共51页).ppt Java技术与应用 (共32页).ppt Java...
本课题是应用了计算机网络通信技术和JAVA网络编程的基础知识,以JAVA为平台,利用Eclipse开发工具,并使用SQL Server 2000管理数据库数据开发出的基于Socket的网络即时通信系统。系统采用客户机/服务器(C/S)的模式...
【完整课程列表】 Java语言基础 Java网络编程技术 Java程序设计使用教程 第01章 java语言概述(共43页).ppt ...Java语言基础 Java网络编程技术 Java程序设计使用教程 第10章 网络通信(共53页).ppt
网络基础之网络协议篇 111 UDP传输 124 TCP传输 126 十八、 反射技术 127 十九、 Ajax原理及实现步骤★★★★★ 130 Ajax概述 130 Ajax工作原理 130 Ajax实现步骤 130 详解区分请求类型: GET或POST 131 $.ajax标准...
用java编写的nio通信的例子,nio是io编程的新版本,比io较流行。同时本例子是适用socket通信的。可以在此基础上,添加您的个人应用。本例子适用于:java通信的学习者,android平台通信的学习者。
Java串口通信编程指南,java基础,串口通信
本课题是应用了计算机网络通信技术和JAVA网络编程的基础知识,以JAVA为平台,利用Eclipse开发工具,并使用SQL Server 2000管理数据库数据开发出的基于Socket的网络即时通信系统。系统采用客户机/服务器(C/S)的模式...
可编程控制器(PLC)是一种数字运算操作的电子系统,专为在...近年来,Java语言在串口通信程序设计方面,也有了重要应用。以西门子公司生产的S7-200型PLC为基础,给出了PLC与计算机通讯时上位机和下位机之间相应的简单程序。
NULL 博文链接:https://lixiongzhi-m.iteye.com/blog/1706805
Java网络通信系统的研究与开发设计与实现项目是一款基于Java语言开发的网络通信软件系统。该系统基于客户端和服务端之间的互联,提供了一系列的客户端和服务端间的通信方式,包括TCP协议,UDP协议,并通过自定义通信...
这是一个非阻塞通信学习的基础模板,让你轻松掌握非阻塞通信。里面还包含了可运行的jar包,可以抢先体验效果哦~_~
通过深入的理论分析和实践验证,探讨了JAVA网络通信系统的关键技术问题,为系统的进一步开发和应用提供了坚实的理论基础。 **源代码**:包含了系统的全部源代码,结构清晰、注释详细,便于学习和二次开发。代码实现...
学生可以根据自己的兴趣和需求,在此基础上进行二次开发和定制,进一步深入学习和掌握Java网络通信的核心技术和应用。 同时,为了帮助同学们更好地理解和应用该项目,我们还提供了完整的论文和开题报告,涵盖了项目...
java.net包socket通信,基础客户端 和 服务端的通信传输实现
学习Android必备的Java基础课件。内容包含基础语法,面向对象(重点),集合框架(重点),常用类库API,Java界面编程中的AWT,事件机制和Swing,Java高级编程(Annotation,多线程,阻塞和异步网络通信)。