4.11总结

IO流和网络编程

IO流

IO流根据流的类型分为两种:

一种是输入流,另一种是输出流

输入流只能用来读取数据,输出流只能用来写入数据。

IO流存在两种操作文件类型:

字节流和字符流

字符流只能用于纯文本操作,而字节流较为全面,可以用于视频、文本等操作

字节流一次只能读取一个byte,字符流一次可以读取多个byte

字节流:

FileOutputStream

FileInputStream

字符流:

Reader

Writer

为了满足更多的需求,还创建了一种缓冲流,如字符缓冲流、字节缓冲流

例:

BufferFileOutputStream

BufferFileInputStream

缓冲流的存在是为了能够处理更多的数据,在数据与对象传输数据时读取一块空间,不断存入数据,以便能够一次性处理更多的数据,提高程序的效率。

字节流代码示例:

//使用字节流进行简单的文件拷贝
public class filethree {
    public static void main(String[] args) throws IOException {
        FileInputStream f =new FileInputStream("start\\a.txt");
        FileOutputStream ff =new FileOutputStream("start\\c.txt");

        int aa;
        while((aa=f.read())!=-1){
            ff.write(aa);
        }
        ff.close();
        f.close();
    }
}


//一次性读取多个字节
public class filefive {
    public static void main(String[] args) throws IOException {
        long start =System.currentTimeMillis();
        FileInputStream f=new FileInputStream("start\\a.txt");
        FileOutputStream ff=new FileOutputStream("start\\c.txt");

        int len;
        byte[] bytes=new byte[1024*1024*5];
        while((len=f.read())!=-1){
            ff.write(bytes,0,len);
        }
        f.close();
        ff.close();

        long end=System.currentTimeMillis();

        System.out.println(end-start);
    }
}

字符流代码示例:

public class ReadFileExample {

    public static void main(String[] args) {
        try (Reader reader = new FileReader("example.txt","utf-8")) {
            char[] buffer = new char[1024];
            int length;
            while ((length = reader.read(buffer)) != -1) {
                String str = new String(buffer, 0, length);
                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


public class WriteFileExample {

    public static void main(String[] args) {
        String content = "这是要写入文件的内容";
        try (Writer writer = new FileWriter("example.txt")) {
            writer.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

缓冲流代码示例:

public static void main(String[] args) throws IOException {
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("start\\a.txt"));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("start\\c.txt"));
        byte[] bytes=new byte[2];
        int len;
        while((len=bis.read())!=-1){
            bos.write(bytes,0,len);
        }
        bos.close();
        bis.close();
    }
}

网络编程

网络编程就是计算机和计算机之间通过网络进行数据传输

网络编程的三要素

IP端口号协议

每一台电脑都有着独属于自己的IP地址

IP地址和端口号是计算机网络中的重要概念,它们用于在网络上唯一标识一个通信实体或进程。

IP地址是指互联网协议地址,它是由32位二进制数表示的,通常使用点分十进制数表示。IP地址的作用是用来标识网络上的设备,类似于电话号码,可以用来进行网络通信。在通信过程中,源设备通过IP地址找到目的设备,然后发送数据。

端口号则是指在一个设备中运行的应用程序的标识符,它是一个16位的整数(0~65535)。每个端口号都对应着一个特定的应用程序,例如HTTP应用使用80端口,FTP应用使用21端口等。在通信过程中,源设备通过端口号找到目的设备上的特定应用程序,然后将数据传送给它。

IP地址和端口号的组合可以唯一地标识一个通信实体或进程,因此在进行网络通信时,需要同时指定通信双方的IP地址和端口号。

当用户在浏览器中输入域名时,浏览器会向DNS服务器发送请求,以获取对应的IP地址。因此,域名与IP地址是一一对应的关系。从技术上来说,一个域名可以对应多个IP地址,这是为了实现负载均衡和故障转移等目的,但通常情况下,一个域名只对应一个IP地址。

而端口号则用于标识设备中运行的具体应用程序。同一个设备上运行的不同应用程序会使用不同的端口号进行区分。在进行网络通信时,源设备通过IP地址和端口号找到目标设备上特定的应用程序,然后将数据传送给它。

协议:

TCP和UDP

在服务器之间进行数据传送时,TCP的速度慢于UDP,但是UDP在传输过程中不会管理数据,会导致传输完成后有大量包丢失,而TCP虽然速度稍慢与UDP,但是其具有高安全性,丢失的数据少,目前使用的范围更广

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输层协议。它在互联网上广泛应用于数据传输中,例如 HTTP、FTP 等应用层协议都是基于 TCP 协议工作的。

TCP 协议的主要特点包括:

  1. 面向连接:在进行数据通信前,需要先通过三次握手建立连接,连接成功后才能进行数据传输。
  2. 可靠性:TCP 提供可靠的数据传输,这是通过利用确认、重传等机制来实现的。
  3. 拥塞控制:TCP 通过拥塞窗口、慢启动以及拥塞避免等机制来有效地控制网络拥塞。
  4. 流量控制:TCP 通过滑动窗口机制来实现流量控制,保证数据接收方不会被发送方的数据淹没。

TCP 协议的通信过程分为三个阶段:建立连接、数据传输和断开连接。建立连接时,客户端向服务端发送 SYN 报文,服务端收到后回复一个 SYN+ACK 报文,客户端再向服务端发送一个 ACK 报文,这个过程就是三次握手。之后就可以进行数据传输,数据传输完毕后,双方可以通过四次挥手的方式来断开连接。

常见的TCP协议

  1. HTTP(Hypertext Transfer Protocol,超文本传输协议):用于在客户端和服务器之间传输超文本、图片、音频、视频等各种类型的数据。
  2. HTTPS(Hypertext Transfer Protocol Secure,安全的超文本传输协议):是基于 SSL/TLS 加密传输的 HTTP 协议,可以保证在网络传输过程中的数据安全。
  3. FTP(File Transfer Protocol,文件传输协议):用于在网络上进行文件传输。
  4. SMTP(Simple Mail Transfer Protocol,简单邮件传输协议):用于发送电子邮件。
  5. POP3(Post Office Protocol version 3,邮局协议第3版):用于接收电子邮件。
  6. IMAP(Internet Message Access Protocol,Internet消息访问协议):也是用于接收电子邮件的协议,相比 POP3 具有更多的功能。
  7. DNS(Domain Name System,域名系统):将域名解析成 IP 地址。
  8. Telnet:用于远程登录到其他计算机。

除此之外,实验室的学长进行了服务器创建教学,教会了我们如何手敲一个简单的服务器

服务器发送端代码:

public class Net2 {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket();

        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("请输入要说的话");
            String str=sc.nextLine();
            if("886".equals(str)){
                break;
            }
            byte[] bytes=str.getBytes();
            InetAddress address=InetAddress.getByName("127.0.0.1");
            int port=10086;
            DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
            ds.send(dp);
        }
    }
}

服务器接收端代码:

public class MyNet2 {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(10086);

        byte[] bytes=new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length);

        while (true) {
            ds.receive(dp);

            byte[] data=dp.getData();
            int len=dp.getLength();

            String ip=dp.getAddress().getHostAddress();
            String name=dp.getAddress().getHostName();

            System.out.println(ip+name+new String(data,0,len));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值