最近学习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编程语言中,网络通信是通过套接字(Socket)技术实现的,特别是TCP(传输控制协议)作为网络通信的基础。本项目实践了客户端与服务端之间基于TCP的交互,实现了简单的对话功能,其中服务端运行在本地主机上。...
本课题是应用了计算机网络通信技术和JAVA网络编程的基础知识,以JAVA为平台,利用Eclipse开发工具,并使用SQL Server 2000管理数据库数据开发出的基于Socket的网络即时通信系统。(论文+源代码+开题报告)
Java局域网通信软件是基于Java编程语言实现的,用于在局域网内不同设备间进行数据交换的应用程序。在Java实训课程中,这个主题通常会涉及到网络编程的基础概念、Socket编程、多线程以及数据传输协议等核心知识点。...
串口通信的基础概念包括: 1. **波特率**:数据传输的速度,常见的波特率有9600、19200、38400等。 2. **数据位**:每次传输的数据位数,通常为5、7或8位。 3. **停止位**:数据传输后的空闲位数,用来确保接收端...
在即时通信领域,Socket扮演着关键角色,它构建了数据传输的基础通道。 首先,我们来深入理解JAVA Socket。JAVA Socket是Java提供的网络编程接口,它基于TCP协议,确保了数据的可靠传输。在即时通信程序中,Socket...
在这个基础例程中,我们将探讨如何使用Java的Socket API进行客户端和服务端之间的通信,并传递Java Bean对象。 首先,我们需要理解Socket的基本概念。Socket是网络上的进程间通信(IPC)的一种方式,它提供双向的...
总的来说,“基于Java的视频通信”项目涵盖了众多IT领域的技术,不仅要求开发者有扎实的Java基础,还需要对网络编程、音视频处理、并发编程等有深入理解。通过这样的项目实践,可以提升开发者在实际工作中解决复杂...
Java Socket 是一种网络通信协议,它是Java编程语言中实现客户端-服务器模型的基础。Socket 提供了低级别的、面向连接的、双向通信的网络接口,允许应用程序通过网络进行数据传输。在本示例中,我们将深入探讨Java ...
Java串口通信是一种在计算机...通过这个完整代码集,开发者可以快速了解和掌握Java串口通信的基本操作,为自己的项目提供一个可靠的串口通信基础。对于需要与硬件设备交互的Java应用来说,这是一个非常实用的参考资料。
Java Socket通信是网络编程中的重要一环,它提供了在两台计算机之间建立低级连接的能力,使得它们可以相互通信。在这个"java上socket通信即时...这不仅加深了对Java编程的理解,也为构建更复杂的网络应用打下了基础。
完整版java基础入门教程由浅入深讲解 Java语言编程基础 第14章 网络通信(共76页).ppt 完整版java基础入门教程由浅入深讲解 Java语言编程基础 第15章 数据库访问(共51页).ppt Java技术与应用 (共32页).ppt Java...
Java中的`Socket`类代表客户端,`ServerSocket`类代表服务器端,它们构成了网络通信的基础。 2. **套接字编程**: `Socket`类和`ServerSocket`类是Java套接字编程的核心。`ServerSocket`在指定端口上监听连接请求...
### JAVA编写网络通信程序知识点详解 #### 一、Java中输入/输出流概念 Java中的输入/输出(I/O)流是实现数据读写的重要工具。流被分为输入流和输出流两大类,它们分别用于从数据源读取数据和向目的地写入数据。 ...
在Android平台上进行Java开发时,CAN(Controller Area Network)通信是一种常见的硬件接口技术,用于设备间的实时数据交换,尤其在汽车电子系统、自动化设备和工业控制等领域应用广泛。本示例"android java 开发can...
综上所述,Java Socket通信实现涉及网络编程基础、TCP/IP协议以及Java I/O流的使用。通过服务端和客户端的代码实现,可以理解数据如何在网络中双向传输,并且良好的注释有助于提升代码的可维护性。在实际项目中,...
Java的Socket类是实现网络通信的基础,它提供了TCP连接的建立和数据传输的能力。在网络即时通信系统中,服务器端会创建一个ServerSocket,监听特定端口,等待客户端的连接请求。客户端则通过Socket对象连接到服务器...
Java Socket通信实现是Java网络编程中的重要组成部分,它允许两台计算机通过TCP/IP协议进行双向通信。在Java中,Socket提供了低级别的、基于连接的、面向数据流的通信API,可以用于实现客户端-服务器架构的应用程序...
3. Java 语言基础:Java 通信录小程序 涉及了 Java 语言的基础知识,包括变量声明、数据类型、运算符、控制流语句、方法定义等。这些基础知识是Java编程的基础,需要初学者牢固掌握。 4. 面向对象编程:Java 通信录...
Java Socket通信是网络编程中的基础概念,主要用于两个应用程序之间的双向通信。在这个"Java_socket 通信示例"中,我们看到的是一个简单的聊天室应用,它利用了Java的Socket API来实现实时的数据交换。以下是对这个...