socket网络编程实现客户端和服务端通信

之前的博客分享过远程备份oracle数据库的代码,但是因为情况变动,代码部署的服务器和数据库服务器不是一个,并且代码部署所在服务器没有oracle的客户端,因此之前的实现策略只能舍弃。尝试一个新的方法:socket编程,本篇博客以Java.net.Socket为demo简单介绍下。

什么是socket编程

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;如果说HTTP是轿车,提供了封装或者显示数据的具体形式;那么Socket是发动机,提供了网络通信的能力。

Socket与ServerSocket的交互:

盗了一张图,我觉得介绍的特别清楚。客户端new Socket(‘主机号’,‘端口号’);服务端new ServerSocket(‘端口号’);并且通过accept()方法进行监听,等待连接;它们都是通过输入输出流交换数据。可以根据自己的需要将输入输出流包装成其他流。

实现demo:
客户端:

 public static void main(String[] args){
    try{
      //1、创建客户端Socket,指定服务器地址和端口
      Socket socket =new Socket("127.0.0.1",9086);
      //2、获取输出流,向服务器端发送信息
      OutputStream os = socket.getOutputStream();//字节输出流
      PrintWriter pw =new PrintWriter(os);//将输出流包装成打印流
      pw.write("用户名:admin;密码:admin");
      pw.flush();
      socket.shutdownOutput();
      
      //3、获取输入流,并读取服务器端的响应信息
      InputStream is = socket.getInputStream();
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      String info = null;
      while((info=br.readLine())!=null){
        System.out.println("Receive from server message=: "+info);
      }
      
      //4、关闭资源
      br.close();
      is.close();
      pw.close();
      os.close();
      socket.close();
    }catch(IOException e){
      System.out.println(e);
    }
  }

服务端:

public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = null;
    Socket socket = null;
    Reader reader = null;
    OutputStream os = null;
    PrintWriter pw = null;
    try{
      //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
      serverSocket =new ServerSocket(9086);//1024-65535的某个端口
      //2、调用accept()方法开始监听,等待客户端的连接
      socket = serverSocket.accept();
      //3、获取输入流,并读取客户端信息
      reader = new InputStreamReader(socket.getInputStream());
      char chars[] = new char[1024];
      int len;
      String strClient = "";
      while ((len=reader.read(chars)) != -1) {
        strClient=new String(chars, 0, len);
        System.out.println("Receive from client message=: " + strClient);
      }
      socket.shutdownInput();//关闭输入流
      //4、获取输出流,响应客户端的请求
      os = socket.getOutputStream();
      pw = new PrintWriter(os);
      pw.write("Hello World");
      pw.flush();
      //5、关闭资源
      pw.close();
      os.close();
      reader.close();
      socket.close();
      serverSocket.close();
    }catch(IOException e){
      e.printStackTrace();
    }

输出结果:

client输出:

Receive from server message=: Hello World

Server输出:
Receive from client message=: 用户名:admin;密码:admin

客户端和服务端代码放在不同的服务器上面,客户端需要服务端的ip地址和端口号,与服务端的端口号相符合就建立起连接,聊天工具大概就是这种实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼香Ross

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值