网络编程:概述及TCP、UDP简单实例

本文介绍了网络编程的基本概念,包括OSI和TCP/IP模型,详细解释了数据在网络中的传输过程。同时对比了TCP和UDP两种传输协议的特点,并提供了Java语言实现的UDP和TCP编程示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程概述

网络模型

  • OSI(Open System Interconnection:开放式系统互联)参考模型
  • TCP/IP参考模型

A主机往B主机发送数据数据是如何传输的?

A:传输数据

1.应用层:主要是一些终端应用,比如FTP、WEB浏览器、QQ等。应用层将数据进行封装,加上应用层的特征,然后数据传到表示层

2.表示层:接收到应用层的数据进行格式化、加密等一些列处理,加上表示层的特征,然会将数据传入到会话层

3.会话层:接收到表示层的数据后建立会话,加上会话层的特征,然后将数据传入到传输层

4.传输层:定义了一些传输数据的协议和端口,接收到会话层的数据后建立连接,加上传输层的特征,然后将数据传入到网络层

5.网络层:接收到传输层的数据包后进行逻辑地址寻址,实现不同网络之间的路径选择(如:寻找IP地址、选择路由等),处理好数据加上网络层的特征,并将数据包传入到下一层。

6.数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等,然后将数据包传入到物理层。

7.物理层:通过物理连接(网线、无线、蓝牙等)将数据发送到B服务器

B:接收数据

从底层将数据一层层的进行拆包并解析,最终传输到应用层。

OSI参考模型TCP/IP参考模型
应用层应用层
表示层
会话层
传输层传输层
网络层网络层
数据链路层主机至网络层
物理层

图解
在这里插入图片描述

网络通讯三要素

  • IP地址

网络中设备的唯一标识。本机Ip地址可用127.0.0.1表示,主机名:localhost

  • 端口

用于标识进程的逻辑地址,不同进程的标识

有效端口:0 ~ 65536,其中0 ~1024为系统使用或保留端口

  • 传输协议

通讯的规则。常见协议:TCP,UDP

TCP和UDP

  • UDP(User Datagram Protocol:用户数据报协议)

不需要建立连接,是不可靠协议;

传输速度块;

数据需要封包,每个数据包的大小限制在64k以内;

  • TCP

需要建立连接

在连接中进行大数据量传输

通过三次握手完成连接,是可靠协议

因为要建立连接,所以效率没有UDP高


socket

  • Socket就是为网络服务提供的一种机制。
  • 通信的两端都有Socket。
  • 网络通信其实就是Socket间的通信。
  • 数据在两个Socket间通过IO传输

UDP实例

import java.io.IOException;
import java.net.*;

/*
通过udp传输方式,将一段文字数据发送出去
思路:
1、建立udpsocket服务
2、提供数据,并将数据封装到数据包中
3、通过socket服务的发送功能,将数据包发送出去
4、关闭资源
 */
class UDPSend{
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket();
        byte[] buf = "udp send service".getBytes();
        DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10001);
        ds.send(dp);
        ds.close();
    }
}

/*
接收UDP协议传输的数据包
思路:
1、定义udpsocket服务,通常会监听一个端口。
2、定义一个数据包,存储接收到的数据
3、通过socket服务的receive将收到的数据存入已定义好的数据包中
4、通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上
5、关闭资源
 */
class UDPRecive{
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket(10001);
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf,buf.length);
        ds.receive(dp);

        String ip = dp.getAddress().getHostAddress();
        String data = new String(dp.getData(), 0, dp.getLength());
        int port = dp.getPort();

        System.out.println(ip+"::"+data+"::"+port);
        ds.close();
    }
}

TCP实例

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
演示TCP传输
1、tcp分客户端和服务端
2、客户端对应的对象是socket
   服务端对应的对象是ServerSocked
 */

/*
客户端:
建立socket对象时就可以去连接指定主机。
因为tcp是面向连接的。所以在建立socket服务时,就要有服务端存在并连接成功。形成通道后,在该通道进行数据传输

思路:
1.创建socket服务,并指定连接地址和端口
 */
class TCPClient{
    public static void main(String[] args) throws Exception {
        Socket s = new Socket("127.0.0.1",10003);

        //获取socket流中的输出流
        OutputStream out = s.getOutputStream();
        out.write("tcp client start".getBytes());
        s.close();
    }
}

/*
服务端:
1.建立服务端socket对象,并并监听一个端口
2.获取链接过来的客户端对象。通过ServerSocket的accept方法。没有连接就会等待,所以这个方法是阻塞式的。
3.客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。
4.关闭服务端(可选)
 */
class TCPServer{
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(10003);
        Socket accept = serverSocket.accept();

        String ip = accept.getInetAddress().getHostAddress();
        System.out.println("Ip:"+ip);
        InputStream inputStream = accept.getInputStream();

        byte[] buf = new byte[1024];
        int len = inputStream.read(buf);

        System.out.println(new String(buf,0,len));
        accept.close(); //关闭客户端
        serverSocket.close();  //关闭服务端
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值