Java 网络

网络学习

什么是网络

由点和线构成,表示诸多对象间的相互联系
计算机网络:为实现资源共享,和信息传递,通过通信线路连接起来的若干主机。
分类:局域网,城域网,广域网

OSI参考模型

在这里插入图片描述

TCP/IP模型

一组用于实现网络互联的通信协议,将协议分成四个层次
在这里插入图片描述

TCP

传输控制协议:是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程需要三次握手,断开连接的过程需要四次挥手
三次握手:
建立连接请求,同意建立连接,发送确认信息
四次挥手:
发送分手信息,回复稍等,回复同意分手,发送确定。

UDP

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

IP

互联网协议/网际协议
负责将数据从一台机器发送到另一台机器
给互联网每台设备分配一个唯一标识(IP地址)

IPV4:

4字节32位整数,,并分成4段8位的二进制数,每8位之间用 圆点隔开,每8为整数可以转换为一个0——255的十进制整数
255.255.255.255

IPV6

16字节128位整数,,并分成8段16进制数,每16位之间用 圆点隔开,每16位整数可以转换为一个0——65535的十进制整数
FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF
在这里插入图片描述

端口号(port)

在通信实体上进行网络通讯程序的唯一标识

在这里插入图片描述

InetAddress类

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

在这里插入图片描述

package net;

import java.net.InetAddress;

public class demo1 {
    public static void main(String[] args) throws Exception{
        //第一种方式getLocalHost
        InetAddress address=InetAddress.getLocalHost();

        System.out.println("ip地址"+address.getHostAddress()+" 主机名"+address.getHostName());
        //2.getByName(“ip地址");
        InetAddress sd=InetAddress.getByName("192.168.0.107");
        System.out.println("ip地址"+sd.getHostAddress()+" 主机名"+sd.getHostName());
        //getByName(127.0.0.1)
        InetAddress sde=InetAddress.getByName("127.0.0.1");
        System.out.println("ip地址"+sde.getHostAddress()+" 主机名"+sde.getHostName());
        //getByName(LocalHost);
        InetAddress sdee=InetAddress.getByName("localhost");
        System.out.println("ip地址"+sdee.getHostAddress()+" 主机名"+sdee.getHostName());
        //创建局域网IP地址对象
//        InetAddress sdeee=InetAddress.getByName("192.168.0.198");
//        System.out.println("ip地址"+sdeee.getHostAddress()+" 主机名"+sdeee.getHostName());
//        System.out.println(sdeee.isReachable(2000));
        InetAddress inetAddress=InetAddress.getByName("www.baidu.com");
        System.out.println(inetAddress.getHostAddress()+inetAddress.getHostName());
        System.out.println(inetAddress.isReachable(2000));
        InetAddress[] inetAddresses=InetAddress.getAllByName("www.baidu.com");
        for (InetAddress id:inetAddresses
        ) {
            System.out.println(id.getHostAddress()+id.getHostName());

        }

    }
}

基于TCP协议Socket编程

Socket(套接字)是网络中的一个通信节点
分为客户端Socket与服务器ServerSocket
通信要求:IP地址+端口号

开发步骤

  • 服务器端
    • 创建ServerSocket,指定端口号
    • 调用accept等待客户端接入
    • 使用输入流,接收请求数据到服务器
    • 使用输出流,发送响应数据给客户端
    • 释放资源
  • 客户端
    • 创建Socket,指定服务器IP+端口号
    • 使用输出流,发送请求数据给服务器
    • 使用输入流,就收响应数据到客户端(等待)
    • 释放资源
package net;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/*
	- 创建ServerSocket,指定端口号
	- 调用accept等待客户端接入
	- 使用输入流,接收请求数据到服务器
	- 使用输出流,发送响应数据给客户端
	- 释放资源
 */
public class TcpServer {
    public static void main(String[] args) throws Exception{
        ServerSocket serverSocket=new ServerSocket(1027);
        Socket socket=serverSocket.accept();//阻塞方法,没有客户端请求就堵塞
        //获取输入流,读取客户端发送的数据
        InputStream  inputStream=socket.getInputStream();
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
        String data=bufferedReader.readLine();
        System.out.println("客户发送"+data);
        bufferedReader.close();
        socket.close();
        serverSocket.close();
    }
}

package net;

import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.logging.SocketHandler;

/*
	- 创建Socket,指定服务器IP+端口号
	- 使用输出流,发送请求数据给服务器
	- 使用输入流,就收响应数据到客户端(等待)
	- 释放资源
 */
public class TcpC {
    public static void main(String[] args) throws Exception {
//        - 创建Socket,指定服务器IP+端口号
        Socket socket=new Socket("192.168.0.107",1027);
//       - 使用输出流,发送请求数据给服务器
        OutputStream outputStream=socket.getOutputStream();
        BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
        bufferedWriter.write("好久不见");
//       - 使用输入流,就收响应数据到客户端(等待)
//        - 释放资源
        bufferedWriter.close();
        socket.close();

    }
}

发送文件

package net;

import Demo2.Fil;
import com.sun.org.apache.bcel.internal.generic.IFLE;

import java.io.*;
import java.net.Socket;
import java.util.logging.SocketHandler;

/*
	- 创建Socket,指定服务器IP+端口号
	- 使用输出流,发送请求数据给服务器
	- 使用输入流,就收响应数据到客户端(等待)
	- 释放资源
 */
public class TcpC {
    public static void main(String[] args) throws Exception {
//        - 创建Socket,指定服务器IP+端口号
        Socket socket=new Socket("192.168.0.107",1027);
//       - 使用输出流,发送请求数据给服务器
        OutputStream outputStream=socket.getOutputStream();
        FileInputStream fileInputStream=new FileInputStream("d:\\1.jpeg");
        byte [] buf=new byte[1024*4];
        int count=0;
        while((count=fileInputStream.read(buf))!=-1){
            outputStream.write(buf,0,count);
        }
        fileInputStream.close();
        outputStream.close();
        socket.close();

    }
}
package net;

import com.sun.xml.internal.ws.api.addressing.OneWayFeature;

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

/*
	- 创建ServerSocket,指定端口号
	- 调用accept等待客户端接入
	- 使用输入流,接收请求数据到服务器
	- 使用输出流,发送响应数据给客户端
	- 释放资源
 */
public class TcpServer {
    public static void main(String[] args) throws Exception{
        ServerSocket serverSocket=new ServerSocket(1027);
        Socket socket=serverSocket.accept();//阻塞方法,没有客户端请求就堵塞
        //获取输入流,读取客户端发送的数据
        InputStream inputStream=socket.getInputStream();
        FileOutputStream fileOutputStream=new FileOutputStream("d:\\001.jpg");
        byte[] buf=new byte[1024*4];
        int count=0;
        while((count=inputStream.read(buf))!=-1){
            fileOutputStream.write(buf,0,count);
        }
        fileOutputStream.close();
        inputStream.close();
        socket.close();
        serverSocket.close();

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值