网络编程

网络编程

1、计算机网络概念

​ 网络即将不同区域的电脑连接到一起,组成局域网、城域网或广域网。

​ 主要功能:

​ 1、资源共享

​ 2、信息传输与集中处理

​ 3、均衡负荷与分布处理

2、通讯协议

​ 计算机网路必须按照相同的通讯协议才能实现网络共享。

​ 协议三要素:语义,语法,时序

3、网络爬虫

public class SpiderDemo05 {
    public static void main(String[] args) throws IOException {
        URL url = new URL("http://www.baidu.com");
        //InputStream openStream()
        BufferedReader rd = new BufferedReader(new InputStreamReader(url.openStream()));

        String msg = null;
        while((msg=rd.readLine())!=null){
            System.out.println(msg);
        }

        rd.close();
    }
}

4、传输层协议

TCP协议:

​ 打电话面向连接、安全、可靠、效率低

UDP协议:

​ 发送短信非面向连接、不安全、数据可能丢失、效率高

UDP定义发送端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

/*
    协议: 传输层协议

     UDP :非面向连接  写信   不安全  协议小 简单  效率高  大小限制一般不超60k
     TCP :面向连接  打电话  安全  效率低 没有大小限制  3次握手

     面向Socket编程
     Socket 套接字
        是传输层为应用层开辟的一个小口子,用来传输或者接受数据
       不同写一下Socket实现不同

     UDP:
        DatagramSocket : 定义发送端和接收端
        DatagramPacket : 打包

     UDP定义发送端:
        1.定义我是发送端  DatagramSocket(int port)
        2.准备数据
        3.打包 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 构造一个数据报包发送数据包的长度 length抵消 ioffsetto指定主机上的指定端口号。
        4.发送  send(DatagramPacket p)
        5.关闭
 */
public class UDPSend01 {
    public static void main(String[] args) throws Exception {
        //1.定义我是发送端  DatagramSocket(int port)
        DatagramSocket send = new DatagramSocket(8888);
        System.out.println("我是 发送端...");
        //2.准备数据
        String str = "发发发";
        byte[] bytes = str.getBytes();
        //3.打包
        DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length,new InetSocketAddress("127.0.0.1",9999));
        //4.发送
        send.send(packet);
        //5.关闭
        send.close();
    }


}

UDP定义接收端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/*
UDP定义接收端:
        1.定义我是接收端
        2.准备包裹,用来接收数据 DatagramPacket(byte[] buf, int length)
        3.接收
        4.处理数据
        5.关闭
 */
public class UDPReceive02 {
    public static void main(String[] args) throws Exception {
        //1.定义我是接收端
        DatagramSocket rec = new DatagramSocket(9999);
        System.out.println("我是接收端....");
        // 2.准备包裹,用来接收数据
        byte[] bytes = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bytes,bytes.length);
        // 3.接收
        rec.receive(packet);
        // 4.处理数据
        //getData()   getLength()
        byte[] arr = packet.getData();
        int len = packet.getLength();
        System.out.println(new String(arr,0,len));
        // 5.关闭
        rec.close();
    }
}

TCP定义客户端

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

/*
    tcp实现登录: 客户端

 */
public class TCPLoginClient01 {
    public static void main(String[] args) throws Exception {
        //1.定义我是一个客户端  Socket
        Socket client = new Socket("localhost",9999);
        System.out.println("------------------Client--------------");

        /*
        接收用户键盘输入的用户名与密码
         */
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入用户名:");
        String name = reader.readLine();
        System.out.println("请输入密码:");
        String pwd = reader.readLine();

        //2.获取输出流 getOutputStream()
        DataOutputStream os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));


        //3.写出字符串
        os.writeUTF("username="+name+"&password="+pwd);

        //4.刷出
        os.flush();

        //5.接收服务器端给响应
        DataInputStream is = new DataInputStream(new BufferedInputStream(client.getInputStream()));
        System.out.println(is.readUTF());



        //6.关闭
        os.close();
        client.close();

    }
}

TCP定义服务端

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
    tcp实现登录: 服务器端

    用户名 =laopei
    密码 =1234

    考虑: 对多个客户端做响应?????
 */
public class TCPLoginServer02 {
    public static void main(String[] args) throws Exception {
        //1.定义我是服务端
        ServerSocket server = new ServerSocket(9999);
        System.out.println("--------------Server-----------------");
        //2.阻塞式监听
        Socket client = server.accept();
        System.out.println("一个客户端已经连接成功....");

        //3.获取输入流
        DataInputStream is = new DataInputStream(new BufferedInputStream(client.getInputStream()));


        //4.读入 数据
        String msg = is.readUTF();

        //处理数据
        String name = "";
        String pwd = "";
        String[] arr = msg.split("&");
        for(String str :  arr){
            String[] a = str.split("=");
            if("username".equals(a[0])){
                name = a[1];
            }else if("password".equals(a[0])){
                pwd = a[1];
            }
        }

        //获取输出流  响应给客户端结果
        DataOutputStream os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));

        //判断
        if("laopei".equals(name) && "1234".equals(pwd)){
            os.writeUTF("登录成功");
        }else{
            os.writeUTF("登录失败");
        }

        //刷出
        os.flush();



        //5.关闭
        os.close();
        is.close();
        client.close();
        server.close();
    }
}

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页