网络的认识和学习

网络

写的程序能够借助网络,在不同的计算机之间进行数据传输

计算机网络:通过通讯线路把不同区域的计算机(广义)连接起来,

通过特定的网线能够实现信息,数据共享

网络编程:使的开发的程序,可以借助网络,在不同的计算机之间进行数据传输,

java语言是支持网络传输的

将连接网络的细节都封装好了,提供给程序员的都是一些APT

使用这些类,可以轻松的开发出具有网络通信息的软件

客户端 服务端

网络模型

OSI参考模型 分成了7层 每一层做不同的事情

TCP/IP参考模型 4层 应用层(程序) 传输层(TCP/UDP) 网络层(IP) 物理链路层(实际的网络通信线路)

通信要素:

IP

寻址 找主机 每台电脑都有一个IP 局域网IP(192.168.) 广域网

本地会环地址:127.0.0.1 访问自己电脑的,如果你的局算计没有连接任何通信设备

ipconfig查询自己电脑的IP地址

端口号

与计算机上的程序对应的,每一个运行的程序都会分配一个端口号,不能重复

端口号范围是(0-65535) 0-1024基本都已经被占用 定义时1024-65535

通信协议

通信双方,如何安全可靠·的进行数据传输,传输什么内容,什么速度传输,传输的过程出现问题的解决-->协议

如何进行数据传递

http 超文本传输协议---->网页相关的内容

TCP编程

传输控制协议TCP(Transmission Control Protocol)

安全可靠

客户端--->服务器

必须先测试网络是否流畅

三次握手

四次挥手

java基于TCP协议分装的类如何使用

Socket: 客户端

ServerSocket:服务器端

先启动服务器

在启动客户端

服务器端有一个监听程序

监听到了,获取到对应的客户端程序

例创建客户端并发送到服务器里面:

package com.ffyc.java.day2;
​
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
​
public class Client {
    public static void main(String[] args) {
        //创建客户端程序,创建时,就会三次握手监测网络,以及服务器是否正常
        try {
            Socket socket = new Socket("127.0.0.1",9999);
            OutputStream out = socket.getOutputStream();
            DataOutputStream datout = new DataOutputStream(out);
            datout.writeUTF("你好服务器");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("连接失败");
        }
    }
}
package com.ffyc.java.day2;
​
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
​
public class Server {
    public static void main(String[] args) throws IOException {
        //创建服务器端指定端口,ip同所在的计算机相同
        ServerSocket serverSocket = new ServerSocket(9999);
        //在服务器端监听客户端连段链接,是阻塞式的,如果有程序连接,接收到对应的客户端程序
        System.out.println("服务器启动成功");
        Socket socket = serverSocket.accept();
        System.out.println("连接成功");
​
        //获得输入流
        InputStream in  = socket.getInputStream();
        DataInputStream datain = new DataInputStream(in);
        System.out.println(datain.readUTF());
    }
}

例创建客户端和服务器,由服务器发送到客户端:

package com.ffyc.java.day2;
​
import java.io.*;
import java.net.Socket;
​
public class Client1 {
    public static void main(String[] args) {
        //创建客户端程序,创建时,就会三次握手监测网络,以及服务器是否正常
        try {
            Socket socket = new Socket("127.0.0.1",9999);
            OutputStream out = socket.getOutputStream();
            DataOutputStream datout = new DataOutputStream(out);
            datout.writeUTF("你好服务器");
            //获得输入流
            InputStream in  = socket.getInputStream();
            DataInputStream datain = new DataInputStream(in);
            System.out.println(datain.readUTF());
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("连接失败");
        }
    }
}
package com.ffyc.java.day2;
​
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
​
public class Server1 {
    public static void main(String[] args) throws IOException {
        //创建服务器端指定端口,ip同所在的计算机相同
        ServerSocket serverSocket = new ServerSocket(9999);
        //在服务器端监听客户端连段链接,是阻塞式的,如果有程序连接,接收到对应的客户端程序
        System.out.println("服务器启动成功");
        Socket socket = serverSocket.accept();
        System.out.println("连接成功");
        //获得输入流
        InputStream in  = socket.getInputStream();
        DataInputStream datain = new DataInputStream(in);
        System.out.println(datain.readUTF());
        //获得出流
        OutputStream out  = socket.getOutputStream();
        DataOutputStream dataout = new DataOutputStream(out);
        dataout.writeUTF("你好我收到了");
    }
}

实现客户端和服务器的多段对话:

package com.ffyc.java.day2;
​
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
​
public class Client3 {
    public static void main(String[] args) {
        //创建客户端程序,创建时,就会三次握手监测网络,以及服务器是否正常
        try {
            Socket socket = new Socket("127.0.0.1",9999);
            Scanner scanner = new Scanner(System.in);
            OutputStream out = socket.getOutputStream();
            DataOutputStream datout = new DataOutputStream(out);
            InputStream in  = socket.getInputStream();
            DataInputStream datain = new DataInputStream(in);
            while (true){
                System.out.println("客户端输入:");
                String s = scanner.next();
                datout.writeUTF(s);
                if (s.equals("886")){
                    break;
                }
                System.out.println("服务器说"+datain.readUTF());
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("连接失败");
        }
    }
}
package com.ffyc.java.day2;
​
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
​
public class Server3 {
    public static void main(String[] args) throws IOException {
        //创建服务器端指定端口,ip同所在的计算机相同
        ServerSocket serverSocket = new ServerSocket(9999);
        //在服务器端监听客户端连段链接,是阻塞式的,如果有程序连接,接收到对应的客户端程序
        System.out.println("服务器启动成功");
        Socket socket = serverSocket.accept();
        System.out.println("连接成功");
        OutputStream out = socket.getOutputStream();
        DataOutputStream datout = new DataOutputStream(out);
        InputStream in  = socket.getInputStream();
        DataInputStream datain = new DataInputStream(in);
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("客户端说:" + datain.readUTF());
            System.out.println("服务器端输入:");
            String s = scanner.next();
            try {
                datout.writeUTF(s);
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("客户端把你删了");
            }
            System.out.println("服务器说"+datain.readUTF());
        }
    }
}

UDP编程

将数据都封装到一个数据包中,包含数据源,目标,数据

每次就只管发送,发送失败或者成功,都不知道

速度快,但是不安全

类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。

例:

发送端

package com.ffyc.java.day2UDP;
​
import java.io.IOException;
import java.net.*;
​
//发送端
public class Send {
    public static void main(String[] args) throws IOException {
        //负责发送和接收数据端
        DatagramSocket datagramSocket = new DatagramSocket();
        //数据报的封装
        String s = "你好接收端";
        DatagramPacket datagramPacket = new DatagramPacket(s.getBytes(),s.getBytes().length, InetAddress.getByName("127.0.0.1"),9999);
        datagramSocket.send(datagramPacket);//发送出去
        datagramSocket.close();//关闭
    }
}

接收端

package com.ffyc.java.day2UDP;
​
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
​
//接收端
public class Receive {
    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        byte[] b = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(b,b.length);
        datagramSocket.receive(datagramPacket);
        String s = new String(datagramPacket.getData(),0,datagramPacket.getLength());
        System.out.println(s);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值