#千锋逆战班# 第32天 网络编程 #笔记总结#

计算机网络

为了实现资源共享和信息传递,通过通信线路连接起来的若干主机(Host)

  • 互联网:(Internet)点与点相连
  • 万维网:(WWW - World Wide Web)端与端相连
  • 物联网:(IoT - Internet of things)物与物相连
  • 网络编程:让计算机与计算机之间建立连接、进行通信。

TCP/UDP协议

TCP协议(三次握手,四次挥手,传输控制协议)

  • 是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程需要三次握手,断开连接的过程需要四次挥手

UDP协议(用户数据报协议)

  • 是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,每个包的大小是64kb。

IP协议

Internet Protocol Address互联网协议地址/网际协议地址

  • 分配给互联网设备的数字标签

IP协议分为两种,一种是IPV4,一种是IPV6

  • IPV4:4字节32位整数,并分为4段8位的二进制数,每8位之间用圆点隔开,每8位整数可以转换为一个0~255的十进制整数。
  • IPV4分为A~E类,A类的主要用于政府机构,其范围是1.0.0.1 ~126.255.255.254,B类主要用于中型企业,范围是128.0.0.1 ~ 191.255.255.254,C类适用于个人用户,一般是192.0.0.1 ~ 223.255.255.254,其中D类和E类比较少用,D类(224.0.0.1 ~ 239.255.255.254),E类(240.0.0.1 ~ 255.255.255.254)
  • 回环地址:127.0.0.1,指本机(localhost),一般用于测试使用
  • 常用dos命令:ipconfig(查看IP),ping D.D.D.D(测试IP是否可通)

Port(端口)

端口号:在通信实体上进行网络通讯的程序的唯一标识,一般通过端口来指向系统中某个软件。
端口分类:

  • 公认端口:0 ~ 1023
  • 注册端口:1024 ~ 49151
  • 动态或私有端口:49152 ~ 65535

常用端口:

  • MySql:3306
  • Oracle:1521
  • Tomcat:8080
  • SMTP:25
  • Web服务器:80
  • FTP服务器:21

InetAddress类

表示互联网协议(IP)地址对象,封装了与该IP地址相关的所有信息,并提供获取信息的常用方法。

方法

  • public static InetAddress getLocalHost()
    获取本地主机对象
  • public static InetAddress getByName(String host)
    根据主机名称获得地址对象
  • public static InetAddress[] getAllByName(String host)
    获得所有相关地址对象
  • public String InetAddress getHostAddress()
    获取IP地址字符串
  • public String getHostName()
    获得IP地址主机名

基于TCP的网络编程(服务端/客户端)

客户_服务端
服务端代码示例

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

//完成客户端发送消息给服务端,并且服务端回答消息给客户端;
//服务器端
public class DemoServer {
    public static void main(String[] args) {

        //新建服务器
        try{
            //新建服务器端
            ServerSocket serverSocket = new ServerSocket(9999);

            System.out.println("服务器已开启,等待接入接入中...");

            

            //打开服务器端,等待客户端接入
            Socket accept = serverSocket.accept();

            //获取接入服务器的ip对象
            InetAddress inetAddress = accept.getInetAddress();
            System.out.println("用户:"+inetAddress.getHostName()+"已接入,ip:"+inetAddress.getHostAddress());

            //获取服务器到客户端的字节输出流
            OutputStream outputStream = accept.getOutputStream();

            //将字节输出流转换为字符输出流
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));

            //向客户端发送数据
            //bufferedWriter.write("你好,"+inetAddress.getHostName()+","+inetAddress.getHostAddress());
            bufferedWriter.write("你好啊,客户端\n");
            //清空输出流
            bufferedWriter.flush();


            //获取客户端到服务器的输入流
            InputStream inputStream = accept.getInputStream();
            //将字节输入流转成字符输入流
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            //从客户端接收数据
            String string = bufferedReader.readLine();
            System.out.println("来自客户端的信息:"+string);

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

客户端代码示例

import java.io.*;
import java.net.Socket;

//客户端
public class DemoClient {
    public static void main(String[] args) {
        int port = 9999;//服务端端口号
        String ip = "127.0.0.1";//服务端ip,这里是本地回环地址
        try {
            Socket socket = new Socket(ip, port);

            //获得输入流
            InputStream inputStream = socket.getInputStream();
            //转为缓冲读取流
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

            System.out.println("来自服务器的消息:"+bufferedReader.readLine());

            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
            //获取输出流
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
            bufferedWriter.write("你好啊,服务器端!\n");
            bufferedWriter.flush();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值