【java学习之路】(java SE篇)012.网络编程

本文介绍了网络编程的基本概念,包括网络的定义、网络编程三要素(IP地址、端口号、通信协议)、网络模型(OSI与TCP/IP模型)、IP地址分类及特殊IP地址的应用。此外,还详细阐述了基于TCP协议的Socket编程原理与实例。

网络编程

网络的概念

网络:一组相互连接的计算机

  • 由多台计算机组成
  • 使用物理线路进行连接

网络编程三要素

IP地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备要素

端口号:计算机中应用的标号(代表一个应用程序),0-1024系统使用或保留端口 ,有效端口0-65536

通信协议:通信的规则 TCP,UDP

网络模型

网络模型一

OSI参考模式:开放系统互连参考模型(Open System Interconnect)

网络模型二

TCP/IP参考模型:传输控制/网际协议 Transfer Controln Protocol/Internet Protocol

IP地址的表示方式

▪ IP 地址:32位,由4个8位二进制数组成

▪ IP表示方法:点分十进制

▪ IP地址 = 网络ID +主机ID
– 网络ID:标识计算机或网络设备所在的网段
– 主机ID:标识特定主机或网络设备

IP地址的分类

▪ 地址类用于指定网络 ID 并在网络 ID 和主机 ID 之间提供分隔方法

▪ IP 地址类包括:
– A 类:1-126 (0 段和 127 段不使用 )
– B 类:128-191
– C 类:192-223
– D 类:224-239
– E 类:240-255

特殊的IP地址

▪ 0.0.0.0:本机

▪ 127.0.0.1:本机回环地址,用于本机测试

▪ 255.255.255.255:当前子网,一般用于向当前子网广播信息

IP地址所对应的对象->InetAddress

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressDemo {
    public static void main(String[] args) {
        try {
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println(localHost);
            InetAddress byName = InetAddress.getByName("www.baidu.com");
            System.out.println(byName);
            System.out.println(byName.getHostAddress());
            System.out.println(byName.getHostName());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

端口

端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。

传输协议

UDP:相当于収短信(有字数限制),不需要建立连接,数据报的大小限制在64k内,效率较高,不安全,容易丢包

TCP:相当于打电话,需要建立连接,效率相对比较低,数据传输安全,三次握手完成。(点名->答到->确认)

Socket套接字

▪ 网络上的两个程序通过一个双向的通信连接实现数据的交换

▪ 这个连接的一端称为一个socket。

▪ Java中使用Socket完成TCP程序的开収,使用此类可以方便的建立可靠的、双向的、持续性的、点对点的通讯连接

▪ 在Socket的程序开収中,服务器端使用ServerSocket等待客户端的连接,

▪ 对于java的网络程序来讲,每一个客户端都使用一个Socket对象表示

基于TCP协议的Socket编程

进行网络通信时,Socket需要借助数据流来完成数据的传递工作

package client;

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) throws IOException {
        //创建Socket对象,实际上是开启现实io的虚拟接口(此接口不是java中的接口,而是类似于网线的插槽)
        //需要指定数据接收方的IP地址和端口号
        Socket client = new Socket("localhost",10086);
        //获取输出流对象,向服务端发送数据
        OutputStream outputStream = client.getOutputStream();
        //将输出流对象进行包装
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        //传输数据
        dataOutputStream.writeUTF("Hello,你好");
        //关闭流
        dataOutputStream.close();
        outputStream.close();
        client.close();
    }
}
package server;

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 {
        //服务端需要使用serverSocket来开放本地端口
        ServerSocket serverSocket = new ServerSocket(10086);
        //需要接受client传输过来的数据,需要定义socket对象
        Socket server = serverSocket.accept();
        //通过server获取输入流对象
        InputStream inputStream = server.getInputStream();
        //对输入流做包装
        DataInputStream dataInputStream = new DataInputStream(inputStream);
        //读取相应的数据
        String str = dataInputStream.readUTF();
        //关闭所有的流操作
        dataInputStream.close();
        inputStream.close();
        server.close();
        serverSocket.close();
    }
}

基于TCP协议的Socket编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值