网络编程--核心总结

       网络

               1.概念:一组相互连接的计算机;

               2.特点:

                            1)多台计算机组成;

                             2)使用物理线路进行连接;

                             

                  3.网络编程三要素:

                             1)IP地址:唯一标识网络上的每一台计算机;

                                                 两台电脑之间通信的必备要素;

                             2)端口号:计算机中应用的标号(代表一个应用程序),端口是虚拟概念,并不是说在主机上真的有若干个端口,

                                                 通过端口可以在一个主机运行多个应用程序;

                                                 0-1024目前系统使用,保留端口;以上端口民用使用;

                             3)通信协议:TCP、UDP协议;

                                                                          

                                       TCP和UDP传输协议的区别:

                                               UDP:相当于发短信(有字数限制);

                                                        不需要建立连接;

                                                        通信双方完全平等;

                                                        数据报的大小限制在64k内;

                                                        效率较高,不安全,容易丢包;

                                               TCP:相当于打电话,需要建立连接;

                                                          连接建立时双方存在主次之分;

                                                         效率相对来说比较低,数据传输安全;

                                                         三次握手完成;

                                4) 网络模型:

                                     a)OSI参考模式:开放系统互连参考模型

                                                   

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

                                            

                            5) 特殊的IP地址

                                               ▪ 0.0.0.0:本机
                                               ▪ 127.0.0.1:本机回环地址,用于本机测试
                                               ▪ 255.255.255.255:当前子网,一般用于向当前子网广播信息

                            6)  IP地址所对应的对象——>InetAddress

                                               

                                    代码实现:

package com.cy;

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

public class InetAddressDemo {

    public static void main(String[] args) throws UnknownHostException {
        //获取计算机主机名+IP地址
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost);
        //获取计算机主机名+IP地址
        InetAddress byName = InetAddress.getByName("DESKTOP-FJ5D5J3");
        System.out.println(byName);
        //获得主机的IP地址
        System.out.println(byName.getHostAddress());
        //获取主机的名称
        System.out.println(byName.getHostName());
        
    }
}

           TCP:

                   1)Socket套接字(虚拟接口)

                                      网络上的两个程序通过一个双向的通信连接实现数据之间的交换,这个连接的一端成为Socket.

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

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

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

                                                                                    

                      2)基于TCP协议的Socket编程

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

                                             

                                   代码实现:

                                    客户端:

package com.cy.client;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

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

        //创建socket对象
        Socket client = new Socket("127.0.0.1",10000);
        //-------------向外进行输出---------------------
        //获取输出流对象
        OutputStream outputStream = client.getOutputStream();
        outputStream.write("hello 服务端".getBytes(StandardCharsets.UTF_8));

        //-------------接受服务端数据----------------------
        InputStream inputStream = client.getInputStream();
        //创建缓冲区
        byte[] buffer = new byte[1024];
        int length = inputStream.read(buffer);
        System.out.println("服务端的相应数据是:"+new String(buffer,0,length));


        //关闭流
        inputStream.close();
        outputStream.close();
        client.close();
    }
}

                                 服务端:

package com.cy.server;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class Server02 {
    public static void main(String[] args) throws IOException {
        //创建servcersocket对象
        ServerSocket serverSocket = new ServerSocket(10000);
        //获取服务端的套接字对象
        Socket socket = serverSocket.accept();

        //-------------接受客户端的输入------------------------
        //获取输入流对象
        InputStream inputStream = socket.getInputStream();
        //创建缓冲区
        byte[] buffer=new byte[1024];
        int length = inputStream.read(buffer);
        System.out.println("客户端传输的数据为"+new String(buffer,0,length));

        //-------------返回客户端数据--------------------
        //获取输出流对象
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("你好客户端".getBytes(StandardCharsets.UTF_8));


        //关闭流对象
        outputStream.close();
        inputStream.close();
        serverSocket.close();
    }
}

           UDP:

             服务端:

package com.cy.server;

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

public class UDPServer {

    public static void main(String[] args) throws Exception {
        //创建UDP通信的Socket
        DatagramSocket datagramSocket = new DatagramSocket(8001);
        //创建缓冲区
        byte[] buffer=new byte[1024];
        //创建数据包--用来接收传过来的数据包
        DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length);
        datagramSocket.receive(datagramPacket);
        //打印输出信息
        System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));

    }
}

             客户端:

package com.cy.client;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class UDPClient {

    public static void main(String[] args) throws Exception {
        //创建UDP通信的socket
        DatagramSocket datagramSocket = new DatagramSocket(8000);
        //从控制台读取数据
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        //创建数据包
        DatagramPacket datagramPacket = new DatagramPacket(str.getBytes(StandardCharsets.UTF_8), str.getBytes(StandardCharsets.UTF_8).length, InetAddress.getByName("localhost"), 8001);
        //发送数据包
        datagramSocket.send(datagramPacket);


    }

}

              

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值