java程序间怎么进行通信

发布时间:2022-02-23 14:23:53 作者:小新
来源:亿速云 阅读:122

这篇文章将为大家详细讲解有关java程序间怎么进行通信,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

什么是socket?

socket,中文翻译为套接字。它是一种对网络中不同主机上的应用进程(或者相同主机的不同应用进程)之间进行双向通信的端点的抽象。实际上就是两个网络各种通信连接中的端点。它的作用就是完成应用间的数据传输。

套接字技术简单的来讲就是通过socket,将两个应用进行连接,连接之后就能进行数据传输了。socket只是实现连接的方法。 

小编认为套接字这个翻译并不能直接反映出这门技术的特点(过于生涩),socket可以被翻译为插座,而实际上套接字技术更像是软件上的“插座”和“插头”。汉语中的套接,是一种水管对接的技术,使用一个套接管将两端的水管连接起来,这种技术就叫套接,所以是不是能理解什么是套接字了呢?

怎么使用socket?

不同语言实现套接字的方式不同,java有专门实现套接字的包。只需要import 相应的包,就可以进行套接字编程。

创建socket连接后可以通过getInputStream()getOutputStream()的方法来获取和发送socket之间传输的数据。

接下来就用一个实例代码来介绍一下怎么使用socket吧!

socket项目实战

server.java

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    public static void main(String[] args){
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            //在8888端口上监听,看是否有连接请求过来
            System.out.println("开启服务端");
            Socket accept = serverSocket.accept();
            //获取socket连接
            System.out.println("有连接过来"+accept);
            Thread thread1 = new Thread(){//使用多线程来进行收发,线程1用来接收消息
                @Override
                public void run() {
                    try {
                        InputStream inputStream = accept.getInputStream();//获取socket输入流
                        DataInputStream dataInputStream = new DataInputStream(inputStream);
                        //把输入流封装在DataInputStream
                        while (true){
                            String msg = dataInputStream.readUTF();//使用readUTF读取字符串
                            System.out.println("监听客户端消息: "+msg);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            Thread thread2 = new Thread(){//线程2用来发送消息
                @Override
                public void run() {
                    try {
                        OutputStream outputStream = accept.getOutputStream();
                        //打开输出流
                        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
                        //把输出流封装在DataOutputStream中
                        Scanner scanner = new Scanner(System.in);
                        while (true){
                            String strServer = scanner.next();
                            dataOutputStream.writeUTF(strServer);//使用writeUTF发送字符串
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            thread1.start();
            thread2.start();
            thread1.join();
            System.out.println("服务器关闭");
            accept.close();//关闭单个socket连接
            serverSocket.close(); //关闭这个socket 服务器
        } catch (Exception e) {
            System.out.println("断开连接");
        }
    }
}

client.java

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) {
        String host = "127.0.0.1";//目标电脑的ip地址,这里的地址是本机地址
        int port = 8888;//目标电脑的端口
        boolean flag = true;
        try {
            Socket socket = new Socket(host, port);//创建目标连接,传入ip地址和端口号
            System.out.println("开启客户端");
            Thread thread1 = new Thread() {//使用多线程方法来实行收发,线程1负责接收信息
                @Override
                public void run() {
                    try {
                        InputStream inputStream = socket.getInputStream();//获取socket输入流
                        DataInputStream dataInputStream = new DataInputStream(inputStream);
                        //把输入流封装在DataInputStream
                        while (true) {
                            String msg = dataInputStream.readUTF();//使用readUTF读取字符串
                            System.out.println("接收服务端消息: " + msg);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            Thread thread2 = new Thread() {//线程2用来发送消息
                @Override
                public void run() {
                    try {
                        OutputStream outputStream = socket.getOutputStream();
                        //打开输出流
                        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
                        //把输出流封装在DataOutputStream中
                        Scanner scanner = new Scanner(System.in);
                        while (true) {
                            String str = scanner.next();
                            dataOutputStream.writeUTF(str);//使用writeUTF发送字符串
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            thread1.start();
            thread2.start();
            thread1.join();
            System.out.println("客户端关闭");
            socket.close();//关闭这个socket
        } catch (Exception e) {
            System.out.println("断开连接");
        }
    }
}

关于“java程序间怎么进行通信”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

推荐阅读:
  1. 进程间的通信
  2. docker容器间如何通信

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Bootstrap怎么轻松制作漂亮表格

下一篇:Bootstrap框架怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》