Java——网络编程

目录

网络编程概述

网络模型

网络通信要素

TCP编程

UDP编程


网络编程概述

概述:Java提供的网络类库,可以实现网络连接,联网的底层细节被隐藏在
Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个
跨平台的网络库,程序员面对的是一个统一的网络编程环境

计算机网络:把分布在不同地理位置的具有独立功能的计算机,通过通信线路连接起来,能够实现资源传递共享

网络编程:使用计算机语言开发软件,让软件能够通过网络进行数据交换

目的:直接或间接地通过网络协议与其它计算机进行通讯

核心问题:

1.如何精确的找到计算机网络中的目标主机

IP+端口:找到某台主机+找到主机上的某个程序

2.找到后如何安全可靠的传输数据协议

对传输的速率,代码结构(报文),出错的解决办法等内容进行约定

网络模型

 

 

网络通信要素

IP:指互联网协议地址,又译为网际协议地址.网络中的计算机使用IP地址来进行唯一标识

端口:计算机中的应用程序的一个整数数字标号,用来区分不同的应用程序

通信协议:计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代码结构、 传输控制步骤、出错控制等制定标准

TCP:传输控制协议

1.安全可靠的传输协议

2.每次传输数据时,光与服务器建立连接(三次握手)

3.保证网络通畅,然后在进行数据传输

4.断开时进行四次挥手,保证客户端和服务器端都知情

5.因为要建立连接,所以传输较UDP慢

UDP:用户数据报协议

1.不需要建立网络连接

2.将数据,源,目标封装在数据包中

3.进行发送,发送是否成功,不知道

4.不建立连接,速度快,但是不安全

TCP编程

Socket常用方法:

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket("192.168.31.102",9965);//服务器IP+地址
        OutputStream out=socket.getOutputStream();//输出,将所有的文字转换成字节进行交流
        out.write("你好!".getBytes("utf-8"));//将所有的字符输出”utf-8“,编码
        socket.close();
    }
}

客户端工作过程:

1.创建Socket

2.打开连接到Socket的输入、输出流

3.按照一定的协议对Socket进行读/写的操作

4.关闭Socket

服务器工作过程:

1.调用ServerSocket(int port):创建一个服务器端套接字,并绑定到指定端口上。用于监听客户端的请求

2.调用accept():监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象

3.调用该Socket类对象的getOutputStream()和getOutputStream()和getInputStream():获取输出流和输入流,开始网络数据的发送和接收

4.关闭ServerSocket和Socket对象:客户端访问结束,关闭通信套接字

ServeSocket常用方法:

public class Server {
    public static void main(String[] args) throws IOException {

            ServerSocket serverSocket = new ServerSocket(9999);//接口
            System.out.println("服务器启动成功,等待客户端连接");//
            Socket socket=serverSocket.accept();//接收客户端信息
            System.out.println("客户端连接成功!");
            InputStream in=socket.getInputStream();//输入流,把文字转换成字节进行交流
            OutputStream out=socket.getOutputStream();//输出流
            byte[] b=new byte[100];//将所有的字节存入数组
            int size=in.read(b);//读取数组的长度
            String s=new String(b,0,size,"utf-8");//将数组里面的字节转换成字符串
            System.out.println("客户端说"+s);//输出所有的字符串,客户端说的
            out.write("你好!".getBytes("utf-8"));//向客户端输出
  //          System.out.println("端口已被占用");
        }

    }

UDP编程

发送端:

public class send {
    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket=new DatagramSocket(9999);
        byte[]b="你好接收端".getBytes("utf-8");
        DatagramPacket datagramPacket=new DatagramPacket(b,b.length, InetAddress.getByName("127.0.0.1",9999));
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
    }
}

接受端:

public class Receive {
    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket=new DatagramSocket();
        byte[]b=new byte[1024];
        DatagramPacket datagramPacket=new DatagramPacket(b,b.length);
        datagramSocket.receive(datagramPacket);
        String msg=new String(datagramPacket.getData(),0, datagramPacket.getLength(),"utf-8");
        System.out.println(msg);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值