信息通信练习3.11

本文介绍了使用Java的Socket实现服务器和客户端之间的交互过程。首先展示了服务端如何初始化并监听客户端连接,然后接收客户端数据。客户端部分则讲解了如何连接服务器,发送消息以及关闭资源。整个交互流程包括服务器的端口监听、数据读取和客户端的消息发送。
摘要由CSDN通过智能技术生成

今天要和大家分享的内容是关于计算机和服务器之间交互的场景模拟,不合理的地方还请各位大佬指正哦

正文

注:先上连接的代码,之后再进行拆分讲解

服务端

public class Test01 {
    ServerSocket sc;

    {
        try {
            sc = new ServerSocket(8888);//创建服务器

            //模拟服务器持续工作 while
            while(true){
                System.out.println("Listen");
                Socket socket = sc.accept();//监听客户端
                System.out.println("Clinet Connection   "+socket.getInetAddress() );
                //绑定客户端的连接地址

                InputStream is = socket.getInputStream();//返回连接者的输入流
                int Len = is.read();//获取具体的长度

                byte []bytes = new byte[Len];//获取具体长度,创建具体大小数组
                for (int i = 0; i < Len; i++) {
                    bytes[i] =(byte) is.read();//读到数据存入数组中
                }
                String msg = new String(bytes);//byte -> string
                System.out.println("get:"+msg);//输出获得数据

                //关闭资源
                is.close();
                sc.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Test02().ServerSocketLink();
    }
}

客户端

public class Test03 {


    public void link()
    {
        try {
            //连接
            Socket sc = new Socket("127.0.0.1",668);//连接服务器 127.0.0.1本机ip
            //准备消息
            String name = "i am pzy";//准备发送消息
            OutputStream os = sc.getOutputStream();//返回输出流
            //数据类型转型
            byte [] bytes = name.getBytes();//String -> byte
            //先把字符长度传递给服务器
            int Len = bytes.length;//获取输入字符长度
            os.write(Len);//把长度传给服务端
            for (int i = 0; i < Len; i++) {
                 os.write(bytes[i]);//消息发送给输出流
            }

            //关闭资源
            os.flush();//刷新管道
            os.close();
            sc.close();


        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Test03().link();
    }
}

步骤拆解

服务器的初始化

ServerSocket sc = new ServerSocket(688);//668代表连接的端口

值得一提的是服务器一般都是全年开启的,所以在此做一下具体的模拟,此处加入循环即可

while(){
	System.out.println("Listen");
  1. 监听客户端
	Socket socket = sc.accept();//监听客户端
	System.out.println("Clinet Connection:	"+socket.getInetAddress());//获取客户端连接的ip地址
  1. 获取输入流
InputStream is = socket.getInputStream();//返回客户端的输入流
  1. 读取输入流数据存储到容器中
int Len = is.read();//获取输入流中信息长度
byte []bytes = new byte[Len];//初始化长度相同的存储容器
for(int i = 0;i<Len;i++){
	byte[i]=(byte)is.read();//数据存储 -> 容器
}

System.out.println("get:"+new String(bytes));//这句代码和下面两行是功能相同的

String msg = new String(bytes);//byte -> String
System.out.println("get:"+msg);//终端连接反馈
  1. 关闭资源
is.close();//关闭输入流资源
sc.close();//关闭服务器资源

注:上述代码都在while循环当中
作用:模拟一直运行服务器状态

客户端连接初始化

  1. 连接
Socket sc = new Socket("127.0.0.1",668);
//127.0.0.1代表本机的IP地址
//668代表和上面服务端相同的连接端口号
  1. 发送消息准备
String name = "I am xxx";//发送消息的字符串
  1. 输出流准备
OutputStream os = sc.getOutputStream();
  1. 发送消息类型转换
    为什么要进行类型转换,String为什么不能发送?

byte [] bytes = os.getbytes();//String -> byte

  1. 告诉服务器传入数据长度
int Len = bytes.length;
os.write(Len);
  1. 写入输出流(准备输出给服务器)
for(int i = 0; i<Len;i++){
	os.write(bytes[i]);//输出bytes中存储的数据
}
  1. 刷新管道(可能会出现为发送完毕的情况,刷新管道能够强行把数据输出)
os.flush();
  1. 关闭资源(用完了要及时关闭,养成良好编码习惯)
os.close();//关闭输出流
sc.close();//关闭客户端

以上就是本次信息通信的解析内容了,我们下期再见

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值