关于Socket和ServerSocket的形象化理解

java:关于Socket和ServerSocket的形象化理解


把整过过程看作居民(客户端)将生活污水(数据)传给水厂(服务器端)处理,并将处理好的水传回给居民

客户端

package com.itheima.demo01.TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
* @author 叶志豪2020
* @date 2020/5/31 10:16
*/
public class TCPClient {
  public static void main(String[] args) throws IOException {
      //建立Socket (String IP,int port) 套接字 套接OutputStream对象 write 发送给服务器消息
      Socket socket=new Socket("127.0.0.1",8888); //指向IP为127.0.0.1的8888端口(相当于建造一条水管指向水厂的地址和管口号)
      OutputStream os=socket.getOutputStream();// geOutputStream 获取网络字节输出流对象(水管(socket)套在待处理污水(os)上)
      os.write("你好服务器".getBytes());//向服务器发送消息
      //socket套接InputStream对象 read读取消息 close释放资源
      //接受服务器返回信息(水厂送回处理好的污水)
      InputStream is=socket.getInputStream();//getInputStream获取InputStream对象(拿管子接收水厂传回来的水)
      byte[]bytes=new byte[1024];
      int len=is.read(bytes);
      System.out.println(new String(bytes,0,len));
      //释放资源(关闭设备)
      socket.close();

  }
}

服务器端

package com.itheima.demo01.TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author 叶志豪2020
 * @date 2020/5/31 10:16
 */
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //接受阶段:建立ServerSocket对象 通过accept方法获取Socket对象 getInputStream获取InputStream网络字节输入流对象 read读取接收到的客户端的数据
        ServerSocket server=new ServerSocket(8888);//对象化服务器套接字,指定端口(不指定则随机分配)(相当于水厂专用管道,打开指定管道口)
        Socket socket=server.accept();// accept获取套接字(相当于将水厂专用管道套在普通管道上
        InputStream is=socket.getInputStream();//getInputStream获取InputStream网络字节输出流对象(普通管道接收污水
        byte[]bytes=new byte[1024];
        int len=is.read(bytes);//read读取数据(处理污水)
        System.out.println(new String(bytes,0,len));//打印数据
        //发送阶段:getOutputStream获取OutputStream网络字节输出流对象 write写消息传回客户端 close释放资源
        OutputStream os=socket.getOutputStream();//getOutputStream获取OutputStream网络字节输出流对象(相当于在输出水流外面套上水管
        os.write("收到消息谢谢".getBytes()); //write写消息传回客户端(水泵加压)
        socket.close();
        server.close();//释放资源(关闭设备
    //运行阶段:先启动服务器端,再启动客户端
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值