day20_java网络编程

网络

什么是网络

一组网线连接起来的计算机

作用:

  1. 资源共享
  2. 传输信息
  3. 分布式的计算
  4. 综合性的服务

协议

什么是协议:计算机之间通信的规则

常用协议

  • IP:网际协议,传输信息
  • TCP:传输控制协议,保证数据的准确传输
  • HTTP:超文本传输协议
  • FTP:文件传输协议
  • SMTP:简单邮件传输协议,发邮件
internet:互联网,是一个通用名词,泛指由多个计算机网络互联而成的虚拟网络。
Internet:因特网,是一个专用名词,指当前全球最大的、开放的、由众多网络相互连接而成的特定的计算机网络,它采用TCP/IP协议簇。
www :万维网

IP

网络中计算机的唯一标识。找计算机的。

IP地址

二进制 11000000 . 00001001 . 00010000 . 00001100

十进制 192 . 9 . 16 . 12

IP地址分类

这里写图片描述

InetAddress
常用方法
  • getLocalHost ()
  • getByName (String host)
  • getHostName()
  • getHostAddress()

DNS:域名解析

端口:用于实现程序间的通信。找程序的

常用的公认端口
协议端口
简单邮件传输协议25
文件传输协议21
超文本传输协议80

URL:同一资源定位器

URL格式:

protocol :// hostname[:port] / path / [?query]#fragment
http://服务器名称[:端口号](可写可不写)/目录/[?查询字符串=值 &](可写可不写) #片段

常用方法:
  • getProtocol()
  • getHost()
  • getPort()
  • getDefaultPort()
  • getQuery()
  • getRef()
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

public class TestURL {

    public static void main(String[] args) throws IOException {
        URL url = new URL("http://10.125.6.58:8900/data/a.txt?id=1 & page = 1 #星期3");
        //获得协议
        System.out.println(url.getProtocol());
        //获得主机
        System.out.println(url.getHost());
        //获得端口号
        System.out.println(url.getPort());
        //获得默认端口号
        System.out.println(url.getDefaultPort());
        //获得查询字符串
        System.out.println(url.getQuery());
        //获得片段
        System.out.println(url.getRef());

    }

}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;



public class TestURL2 {

    public static void main(String[] args) throws IOException {
        //https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=122725310,2432101887&fm=27&gp=0.jpg
        //下载图片
        //定位器
        URL url = new URL("https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=122725310,2432101887&fm=27&gp=0.jpg");
        //下载
        //读
        InputStream in = url.openStream();
        //写
        OutputStream out = new FileOutputStream("d:/data/datou.jpg");

        int temp;
        while((temp = in.read())  != -1){
            out.write(temp);
        }
        in.close();
        out.close();

    }

}

数据传输

  1. java支持TCP和UDP协议族
  2. TCP/IP协议
    • 较可靠的双向流协议,准确,速度慢
    • 发送任意数量的数据
  3. UDP协议
    • 比较不可靠,速度块
    • 发送数据限制在64k以下

客户端/服务器模式

C/S : 客户端/服务器模式

B/S:

TCP协议通信

java.net包

Java的java.net包含了所有的用于网络操作的类

客户端Socket (IP,端口)

Socket 类

服务端ServerSocket(端口)

ServerSocket类

实现一个服务器和客户端通信

客户端代码

package day27.socket4;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**客户端服务器互相通信 */
public class Client {

    public static void main(String[] args) throws IOException {
        //socket
        //创建一个客户端
        //Socket socket = new Socket("10.125.6.186",6789);
        //Socket socket = new Socket(InetAddress.getLocalHost(),6789);
        Socket socket = new Socket("127.0.0.1",6789);
        //流,底层的
        InputStream is = socket.getInputStream();
        OutputStream os = socket.getOutputStream();
        //读
        Scanner in = new Scanner(is);//nextLine
        //写                                 强制刷新缓冲区
        PrintWriter out = new PrintWriter(os,true);
        System.out.println("===========客户端======================");
        System.out.print("客户端服务器连接成功");

        //服务器先发信息过来,客户端收,读
        //读
        String sr,sw;
        Scanner input = new Scanner(System.in);
        while(true){
            sr = in.nextLine();//读一行信息
            System.out.print("服务器说:"+sr);
            System.out.print("客户端说:");
            sw = input.next();
            out.println(sw);
            if(sr.equals("end")){
                break;
            }
        }
        //写


        socket.close();//关闭客户端
        input.close();

    }

}

服务端代码:


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {

    public static void main(String[] args) throws IOException {
        //Serversocket
        //建立服务器
        ServerSocket server = new ServerSocket(6789);
        while(true){
        //获得客户端连接,等待连接时处于阻塞状态
        Socket socket = server.accept();
        InputStream is = socket.getInputStream();
        OutputStream os = socket.getOutputStream();

        //包装
        Scanner in = new Scanner(is);//nextLine     
        //                                  强制刷新缓冲区
        PrintWriter out = new PrintWriter(os,true); 
        System.out.println("===========服务器======================");
        System.out.print("客户端服务器连接成功");

        //读从客户端写的内容
        Scanner input = new Scanner(System.in);
        String sr,sw;
        while(true){
            sr = in.nextLine();
            System.out.print("客户端说:"+sr);
            System.out.print("服务器说:");
            sw = input.next();
            out.println(sw);

            if(sw.equals("end")){
                break;
            }
        }   
        socket.close();
    }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值