网络通信编程一

网络通信编程一

计算机网络定义:

1.将多台计算机通过通信线路互相连接,使他们可以数据交换,共享资源,协同工作

2.计算机网络 由计算机、设备硬件、协议、服务组成一个 局域网 、广域网、互联网

网络协议:

1.设计网络通信中规则 以及标准还有服务

2.数据格式、传输数据的效率、传输控制

OSI七层模型和TCP/IP五层模型:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MjxYVy6X-1678285631604)(C:\Users\宙长\AppData\Roaming\Typora\typora-user-images\image-20230308220510202.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Irldygr-1678285631605)(C:\Users\宙长\AppData\Roaming\Typora\typora-user-images\image-20230308220613838.png)]

通信编程基础:

套接字:内存中的对象 保存好与对象建立连接的相关信息 ip 端口号

首先启动监听Socket:

1.监听在本机某个端口是否有socket来连接 ,与Serversocket不同

2.如果有Socket连接则创建对应的Socket对象

3.存在一对Socket对象,通过从Socket对象上获取到传输IO流进行数据传输

A端

//准备一个ServerSocket监听程序 不参与数据传输
            ServerSocket sc=new ServerSocket(58888);
            System.out.println("ServerSocket 初始化完成"+sc.getInetAddress());
            System.out.println("正在监听中");
            //启动监听
            //当监听到有socket 来连接 建立一个对应的socket 与其建立连接 返回自己创建的Socket对象
            Socket A=sc.accept();
            System.out.println("监听到一个连接:"+A.getInetAddress());
            System.out.println(A.getPort());

B端(尝试连接A)

Socket B=new Socket("127.0.0.1",58888);
            System.out.println("B开始连接"+B.getLocalPort());

使用IO传输数据

InputStream:输入流 对方向本方输入

OutputStream:输出流 本方向对方输出

如下方所示,两方各有对应的IO

I--------O

O--------I

//A给对方发送消息
            OutputStream os =A.getOutputStream();
            //os.write(500);//0-255
            int num=65535000;
            int b1=(num>>24)&0xFF;
            int b2=(num>>16)&0xFF;
            int b3=(num>>8)&0xFF;
            int b4=(num>>0)&0xFF;
            os.write(b1);
            os.write(b2);
            os.write(b3);
            os.write(b4);

            os.flush();//刷新 强制立即发送
            System.out.println("发送:"+b1+"-"+b2+"-"+b3+"-"+b4);

            //发送文字
            String msg="你好世界";
            for (int i = 0; i < msg.length(); i++) {
                char c=msg.charAt(i);
                int c1=(c>>8)&0xFF;
                int c2=(c>>0)&0xFF;
                os.write(c1);
                os.write(c2);
            }
            os.flush();
            //收尾,关闭进程占用的资源
            os.close();
            A.close();

发送大型数字时将其分解成八位二进制数,发送字符一个字符两个字节同理分解成两个八位,接收时再用或运算合并成发送的数据。

如1010 1001 0011 0011-》1010 1001 和0011 0011 1010 1001 0000 0000 |0000 0000 0011 0011 =1010 1001 0011 0011

//B接受所连接对象的消息
            InputStream ins =B.getInputStream();
            int b1=ins.read();
            int b2=ins.read();
            int b3=ins.read();
            int b4=ins.read();
            int msg=b1<<24|b2<<16|b3<<8|b4;
            System.out.println("收到:"+msg);

            for (int i=0;i<4;i++){
                int c1=ins.read();
                int c2=ins.read();
                int c=c1<<8|c2;
                System.out.print((char)c);
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值