网络编程(一)

本文概述了计算机网络的基本概念,重点介绍了网络编程,包括网络模型的五层结构,以及使用Java通过TCP和UDP进行数据传输的过程,以客户端和服务端的代码示例展示网络通信的三次握手和四次握手机制。
摘要由CSDN通过智能技术生成

网络编程的概述

什么是计算机网络?

计算机网络是一种将多个计算机设备连接起来,以实现信息交换和资源共享的系统。它通过通信线路和设备,将不同地理位置的计算机设备和终端设备连接起来,使得这些设备可以相互通信、交换信息,实现更广泛的通信应用。

网络编程的概述?

在网络的基础上,开发的程序能够进行数据传输

java语言将网络连接的细节都封装起来了,对外提供一套网络库(类),就可以进行统一环境的网络编程

网络模型

应用层

传输层

网络层

物理层

网络通信要素:

1.IP

互联网协议地址,计算机的地址

2.端口

计算中运行的每个程序都对应分配一个整书编号,不能重复

范围为0~65535,一般0~1024已经被系统占用

3.通信协议(规则,规范,约定)

规定传输的速率,代码结构,出错后如何应对等等规则

TCP

传输控制协议TCP

客户端向服务器发送数据前,首先要建立连接(测试网络是否通畅)

三次握手
1.客户端向服务器发送一个链接请求
2.当服务器收到客户端链接请求后,给客户端做出一个回应 
3.客户端为服务器的回应做出确认回应

正式传输数据

断开时还要互相确认

可靠安全

四次握手
1.客户端向服务器发送一个断开的请求
2.服务器向客户端做出一个回应
3.服务器把没有传完的数据传输完毕,再向客户端做出回应
4.客户端向服务器端的回应作出回应
5.断开
 

UDP

用户数据报协议UDP

把要发送的数据封装成一个数据报(数据包),数据包包含数据,对方的ip,对方的端口,只管发送即可,是否发送成功是不知道的

发送导弹:输入目标地址,只管发送,不管送没送到

package Day1;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

//客户端
public class Test1 {
    public static void main(String[] args) {
        try {
            Socket socket=new Socket("10.13.238.225",8888);
            Scanner scanner=new Scanner(System.in);
                loop:while (true) {
                    System.out.println("请客户端输入想要发送的信息");
                    String s = scanner.next();
                    DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
                    dataOutputStream.writeUTF(s);
                    if(s.equals("0")){
                     break loop;
                    }

                    DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
                    String s1 = dataInputStream.readUTF();
                    System.out.println("服务端的信息");
                    System.out.println(s1);
                }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package Day1;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

//服务器
public class Test2 {
    public static void main(String[] args) {
        try {
            //创建服务器端口
            Scanner scanner = new Scanner(System.in);
            ServerSocket serverSocket=new ServerSocket(8888);
            System.out.println("服务器启动成功!");
            Socket socket=serverSocket.accept();//阻塞,监听客户的连接
            loop:while (true) {
                DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
                System.out.println("客户端的信息");
                System.out.println(dataInputStream.readUTF());


                System.out.println("请服务器输入要发送的信息");
                String s = scanner.next();
                if (s.equals("0")) {
                    break loop;
                }
                DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
                dataOutputStream.writeUTF(s);
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("服务器启动失败!");
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值