Excel不相邻列如何打印在一起-英雄云拓展知识分享
145
2023-10-25
【摘要】 本书摘自《JAVA服务端研发知识图谱》一书中第1章,第9节,由何为、迟文恒 编著。
1.9.5 网络I/O
Java 服务之间可以通过网络进行通信,从而可以实现程序间数据的互通,网络 I/O 是 Java 服务进行微服务化的基础。网络通信一般较为复杂,但本书所涉及的内容一般不用考虑过多的 网络部分,网络问题一般都由使用的服务框架解决。所以这里仅作为演示,了解 Java 基本的通 信方式。在下面的例子中,用 Socket 套接字使用 TCP 协议进行通信,创建两个 Java 程序,分 别是客户端程序和服务端程序。
(1)服务端程序
public class NetIOServer extends Thread{
private ServerSocket serverSocket;
public NetlOServer(int port) throws Exception{
serverSocket = new ServerSocket(port);
//serverSocket.setSoTimeout(20000);
@Override
public void run(){
while (true){
try {
Socket socket = serverSocket.accept();
socketDialogue(socket);
}catch (Exception e){
e.printStackTrace();
break;
public void socketDialogue(Socket socket){
Thread thread =new Thread({
int count=0;
@Override
public void run(){
try {
while(socket.isConnected(){
DataInputStream inputStream=
new DatalnputStream(socket.getInputStream()); System.out.println("socket server receive:"+inputStream.readUTFO); Thread.sleep(5000);
DataOutputStream outputStream=
new DataOutputStream(socket.getOutputStream()); outputStream.writeUTF("server say nihao"+ count++);
socket.close();
}catch(Exception e){
e.printStackTrace();
};
thread.start(
public static void main(String[] args){
try{
NetlOServer server =new NetIOServer(18088);
server.start();
}catch(Exception e){
e.printStackTrace(
在这段代码中,提前使用了线程,线程的使用在1.10节中讲解。在main 方法中创建了一个 Server监听线程,通过 ServerSocket 监听某端口号,当有链接请求时通过 accept 方法返回和客户 端的连接。通过 Socket 得到客户端传过来的数据,并且延迟5s 回复客户端一条数据。这个逻辑 是写在无限循环中的,会一直监听连接的数据情况并且回复。
(2)客户端程序
public class NetIOClient {
public static void main(String[] args){
int count=0;
try {
Socket socket =new Socket("127.0.0. 1",18088);
DataOutputStream outputStream=
new DataOutputStream(socket.getOutputStream(); outputStream.writeUTF("client say nihao");
while (socket.isConnected()){
DataInputStream inputStream=
new DataInputStream(socket.getInputStream()); System.out.printin("socket client receive:"+ inputStream.readUTFO); Thread.sleep(5000);
outputStream.writeUTF("client say nihao"+ count++);
socket.close();
} catch (Exception e){
e.printStackTrace();
客户端的逻辑是请求与服务端的连接,连接成功后向服务端发送一条数据;发送完第一条 数据后,会一直监听服务器的应答,并且延迟5s 回复给服务端。所以在这个例子中,客户端和 服务端之间会一直通信下去,直到手动结束它们。它们的输出情况为:
服务端输出:
socket server receive: client say nihao
socket server receive: client say nihao0
socket server receive: client say nihaol
socket server receive: client say nihao2
客户端输出:
socket client receive: server say nihao0
socket client receive: server say nihaol
socket client receive: server say nihao2
socket client receive: server say nihao3
以上仅演示了基本的服务间通信,具体项目中的通信情况会更加复杂,好在使用框架可以 解决大部分网络问题,让研发人员能够专心完成业务逻辑。如果读者对网络通信很感兴趣,可 以研究网络通信的 NIO 框 架Netty, 相信会有不少收获。
1.10 并发
一 个 Java 程序运行在一个进程⊙中,但是如上面例子所演示,有时希望一个程序可以同时 做好多事情,例如监听端口、接收数据、逻辑计算等等,那么只有一个运算单元就明显不够 了,所以这时需要启动好多个运算单元,这就是多线程。多个线程的执行其实是抢占 CPU 的时 间,但是在感觉上好像在同时进行一样。本节介绍多线程的写法和一些重点。多线程其实是一 个比较困难的知识点,尤其对于初次接触的新人来讲有些时候较为费解,对于多线程的学习一 定要在实际问题中多多摸索才能真正理解。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~