Java实现基于TCP协议的Socket通信

项目之间利用Socket进行通信

前言

项目遇到需要利用socket向别的项目推送数据,由于对于socket接触较少,我的第一反应就是对面有服务端,然后我把数据写成流传过去就可以,对于数据的加密和数据头的封装,只要两边规定好就ok。查了半天资料,基于本地自己建了一个类似聊天服务的通信。

正文

首先本文是基于TCP,可靠的连接。
使用socket,就要符合他的标准,大概分为几步:
创建socket
监听
获取想要传输的数据流
利用socket将数据流传输给对方
获取对方返给我们的数据流
关闭socket和输入输出流

service端

public class ServiceSocket {

    public static void main(String arg[]){
        try {
            //建立套接字
            ServerSocket server = new ServerSocket(3789);
            //监听
            Socket socket = server.accept();
            // 获取想要传输的数据、并存入缓冲池
            InputStreamReader systemIn = new InputStreamReader(System.in);
            BufferedReader systemBuf = new BufferedReader(systemIn);
            String serverData = systemBuf.readLine();
            //建立输出流
            PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
            //在socket中获取客户端输入的、并存入缓冲池,打印客户端信息
            InputStreamReader socketIn = new InputStreamReader(socket.getInputStream());
            BufferedReader socketBuf = new BufferedReader(socketIn);
            System.out.println("client:" + socketBuf.readLine());
            //判断是否结束通信 结束符@@,双方该规定
            while(!serverData.equals("@@")){
                socketOut.println(serverData);
                socketOut.flush();
                System.out.println("server:" + serverData);
                String clientData = socketBuf.readLine();
                //当对方结束,传过来的就是null
                if(!StringUtils.isEmpty(clientData)){
                    System.out.println("client:" + clientData);
                }else {
                    break;
                }
                serverData = systemBuf.readLine();
            }
            //关闭socket和输入输出流
            socketOut.close();
            socketIn.close();
            server.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

client端

public class ClientSocket {

    public static void main(String arg[]){
        try {
            //创建Socket
            Socket socket = new Socket("127.0.0.1",3789);
            //建立连接,并把数据存入缓冲池
            InputStreamReader systemIn = new InputStreamReader(System.in);
            BufferedReader systemBuf = new BufferedReader(systemIn);
            //建立输出流,进行通信
            PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
            String readline = systemBuf.readLine();
            //在socket中获取服务端输入的、并存入缓冲池
            InputStreamReader socketIn = new InputStreamReader(socket.getInputStream());
            BufferedReader socketBuf = new BufferedReader(socketIn);
            System.out.println("server:" + socketBuf.readLine());
            while(!readline.equals("@@")){
                socketOut.println(readline);
                socketOut.flush();
                System.out.println("client:" + readline);
                readline = systemBuf.readLine();
            }
            //关闭socket和输入输出流
            socketOut.close();
            systemIn.close();
            socket.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

以上数据都是读的一行,要是读取文件可以利用while循环在BufferedReader中读取多行,文中的@@是结束通话的结束符双方规定好即可。

结束

虽然现在已经2021年了,但是没有过阴历年总感觉还在2020年,希望年前项目可以顺利上线吧, 学习——永远不晚。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值