TCP、UDP网络编程

网络编程UDP与TCP java编程中udp与tcp 阅读详情

TCP、UDP网络编程

  • 基本概念

    • TCP
      • 可靠、有重传机制、速度慢、有链接
    • UDP
      • 不可靠、速度快、无链接
  • 通信三要素

    源、目的、长度

    客户端主动地发起请求、服务器被动地响应请求

  • TCP建立传输

    • 服务器端

      1. 创建一个套接字
      #include <sys/socket.h>
      int socket(int domain, int type, int protocol);
      /*
      	domain:AF_INET、AF_INET6、AF_UNIX
      	type:SOCK_STREAM、SOCK_DGRAM
      	protocol: 0 
      	返回值:
      		成功: 新套接字所对应文件描述符
      		失败: -1 errno
       */
      
      1. 绑定地址结构
      #include <arpa/inet.h>
      int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
      /*
      	sockfd: socket 函数返回值
      	struct sockaddr_in addr;
              addr.sin_family = AF_INET;
              addr.sin_port = htons(8888);
              addr.sin_addr.s_addr = htonl(INADDR_ANY);
          addr: 传入参数(struct sockaddr *)&addr
      	addrlen: sizeof(addr) 地址结构的大小。
      	返回值:
      		成功:0
      		失败:-1 errno
      */
      
      1. 设置同时与服务器建立连接的上限数。(同时进行3次握手的客户端数量)
      int listen(int sockfd, int backlog);
      /*
      	sockfd: socket 函数返回值
      	backlog:上限数值。最大值 128.
      	返回值:
      		成功:0
      		失败:-1 errno	
      */
      
      1. 阻塞等待客户端建立连接,成功的话,返回一个与客户端成功连接的socket文件描述符。
      int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
      /*
      	sockfd: 客户端socket 函数返回值
      	addr:传出参数。成功与服务器建立连接的那个客户端的地址结构(IP+port)
      		socklen_t clit_addr_len = sizeof(addr);
      	addrlen:传入传出。 &clit_addr_len
      			 入:addr的大小。 出:客户端addr实际大小。
      	返回值:
      		成功:能与客户端进行数据通信的 socket 对应的文件描述。
      		失败: -1 , errno
      */
      
      1. 接收数据
      #include <sys/types.h>
      #include <sys/socket.h>
      ssize_t recv(int sockfd, void *buf, size_t len, int flags);
      /*
      	sockfd: 服务器端socket 函数返回值
      	buf:接收数据buffer
      	len:要接受数据的大小,buffer-1
      	flags:0
      	返回值:
      		成功:返回接收到的字节数
      		失败: -1 , errno
      */
      

      代码示例

      #include <sys/types.h>          
      #include <sys/socket.h>
      #include <stdlib.h>
      #include <stdio.h>
      #include <netinet/in.h>
      #include <string.h>
      #include <arpa/inet.h>
      #include <unistd.h>
      #include <signal.h>
      
      
      #define SERVER_PORT 8888
      #define BACKLOG     10
      
      /*
       * Socket
       * bind
       * listen
       * accept
       * send/receive
       */
      int main(int argc, char **argv)
      {
          int iSocketServer;
          int iSocketClient;
          int iRet;
          int iRecvLen;
      
          struct sockaddr_in tSocketServerAddr;
          struct sockaddr_in tSocketClientAddr;
      
          unsigned char ucRecvBuf[1000];
      
          int iClientNum = -1;
      
          signal(SIGCHLD, SIG_IGN);   /* 回收子进程 */
      
          iSocketServer =  socket(AF_INET, SOCK_STREAM, 0);
          if (-1 == iSocketServer)
          {
              printf("socket error\n");
              return -1;
          }
          tSocketServerAddr.sin_family      = AF_INET;
          tSocketServerAddr.sin_port        = htons(SERVER_PORT); //host to net short
          tSocketServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
          memset(tSocketServerAddr.sin_zero, 0, 8);
      
          iRet = bind(iSocketServer, (const struct sockaddr *)&tSocketServerAddr, sizeof(tSocketServerAddr));
          if (iRet == -1)
          {
              printf("bind error\n");
              return -1;
          }
      
          iRet =  listen(iSocketServer, BACKLOG);
          if (iRet == -1)
          {
              printf("listen error\n");
              return -1;
          }
      
          while(1)
          {
              socklen_t iAddrLen = sizeof(struct sockaddr);
              iSocketClient = accept(iSocketServer, (struct sockaddr *)&tSocketClientAddr, &iAddrLen);
              if (-1 != iSocketClient)
              {
                  iClientNum++;
                  printf("Get connect from client %d: %s\n", iClientNum, inet_ntoa(tSocketClientAddr.sin_addr));
                  if (!fork())
                  {
                      /* 子进程地源码 */
                      while(1)
                      {
                          /* 接收客户端发来的数据并显示出来 */
                          iRecvLen = recv(iSocketClient, ucRecvBuf, 999, 0);
                          if (iRecvLen <= 0)
                          {
                              close(iSocketClient);
                              return -1;
                          }
                          else
                          {
                              ucRecvBuf[iRecvLen] = '\0';
                              printf("Get message from client %d: %s", iClientNum, ucRecvBuf);
                          }
                      }
                  }
              }
          }
          close(iSocketServer);
          return 0;
      }
      
    • 客户端

      1. 创建socket

      2. 与服务器建立连接

      int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
      /*
      	sockfd: socket 函数返回值
      	struct sockaddr_in srv_addr;		// 服务器地址结构
      		srv_addr.sin_family = AF_INET;
      		srv_addr.sin_port = 9527 	跟服务器bind时设定的 port 完全一致。
      		inet_pton(AF_INET, "服务器的IP地址",&srv_adrr.sin_addr.s_addr);
      	addr:传入参数。服务器的地址结构	
      	addrlen:服务器的地址结构的大小
      	返回值:
      		成功:0
      		失败:-1 errno
      */
      
      1. 发送数据
      #include <sys/types.h>
      #include <sys/socket.h>
      ssize_t send(int sockfd, const void *buf, size_t len, int flags);
      /*
      	sockfd:客户端socket 函数返回值
      	buf:发送数据的buffer
      	len:实际发送的字节数strlen(buf)
      	flags:0
      */
      

      代码示例

      #include <sys/types.h>          
      #include <sys/socket.h>
      #include <stdlib.h>
      #include <stdio.h>
      #include <netinet/in.h>
      #include <string.h>
      #include <arpa/inet.h>
      #include <unistd.h>
      
      #define SERVER_PORT 8888
      
      /*
       *socket
       *connect
       *send
       */
      
      int main(int argc, char **argv)
      {
          int iSocketClient;
          int iRet;
          int iSendLen;
      
          struct sockaddr_in tSocketServerAddr;
          unsigned char ucSendBuf[1000];
      
          if (argc != 2)
          {
              printf("Usage:\n");
              printf("%s <server_ip>\n", argv[0]);
              return -1;
          }
          iSocketClient = socket(AF_INET, SOCK_STREAM, 0);
          if (-1 == iSocketClient)
          {
              printf("socket error\n");
              return -1;
          }
      
          tSocketServerAddr.sin_family      = AF_INET;
          tSocketServerAddr.sin_port        = htons(SERVER_PORT); //host to net short
          //tSocketServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
          if(0 == inet_aton(argv[1], &tSocketServerAddr.sin_addr))
          {
              printf("invalid server_ip\n");
              return -1;
          }
      
      
          iRet =  connect(iSocketClient, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr));
          if (-1 == iSocketClient)
          {
              printf("connect error\n");
              return -1;
          }
          while (1)
          {
              if (fgets(ucSendBuf, 999, stdin))
              {
                  iSendLen = send(iSocketClient, ucSendBuf, strlen(ucSendBuf), 0);
                  if (iSendLen <= 0)
                  {
                      close(iSocketClient);
                      return -1;
                  }
              }
          }
          return 0;
      }
      
  • UDP建立传输

    • 服务器端

      1. 创建socket

      2. 绑定地址结构

      3. recvfrom

        ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                                struct sockaddr *src_addr, socklen_t *addrlen);
        
        /*
        	sockfd: 服务端socket 函数返回值
        	buf:接收数据buffer
        	len:要接受数据的大小,buffer-1
        	flags:0
        	src_addr:客户端的地址结构
        	addrlen:地址结构大小
        	返回值:
        		成功:返回接收到的字节数
        		失败: -1 , errno
        */
        

        代码示例

        #include <sys/types.h>          
        #include <sys/socket.h>
        #include <stdlib.h>
        #include <stdio.h>
        #include <netinet/in.h>
        #include <string.h>
        #include <arpa/inet.h>
        #include <unistd.h>
        
        
        #define SERVER_PORT 8888
        #define BACKLOG     10
        
        /*
         * Socket
         * bind
         * sendto/recvfrom
         */
        int main(int argc, char **argv)
        {
            int iSocketServer;
            int iSocketClient;
            int iRet;
            int iRecvLen;
            int iAddrLen;
        
            struct sockaddr_in tSocketServerAddr;
            struct sockaddr_in tSocketClientAddr;
        
            unsigned char ucRecvBuf[1000];
        
            int iClientNum = -1;
        
        
            iSocketServer =  socket(AF_INET, SOCK_DGRAM, 0);
            if (-1 == iSocketServer)
            {
                printf("socket error\n");
                return -1;
            }
            tSocketServerAddr.sin_family      = AF_INET;
            tSocketServerAddr.sin_port        = htons(SERVER_PORT); //host to net short
            tSocketServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
            memset(tSocketServerAddr.sin_zero, 0, 8);
        
            iRet = bind(iSocketServer, (const struct sockaddr *)&tSocketServerAddr, sizeof(tSocketServerAddr));
            if (iRet == -1)
            {
                printf("bind error\n");
                return -1;
            }
        
        
            while(1)
            {
                iAddrLen = sizeof(struct sockaddr);
                iRecvLen = recvfrom(iSocketServer, ucRecvBuf, 999, 0,
                                (struct sockaddr*)&tSocketClientAddr, &iAddrLen);
                if (iRecvLen > 0)
                {
                    ucRecvBuf[iRecvLen] = '\0';
                    printf("Get message from %s : %s", inet_ntoa(tSocketClientAddr.sin_addr), ucRecvBuf);
                }
            }
            close(iSocketServer);
            return 0;
        }
        
    • 客户端

      1. 创建socket

      2. sendto

        ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                              const struct sockaddr *dest_addr, socklen_t addrlen);
        /*
        	sockfd:客户端socket 函数返回值
        	buf:发送数据的buffer
        	len:实际发送的字节数strlen(buf)
        	flags:0
        	dest_addr:送达的服务器端地址结构
        	addrlen:地址结构大小
        */
        

        代码示例

        #include <sys/types.h>          
        #include <sys/socket.h>
        #include <stdlib.h>
        #include <stdio.h>
        #include <netinet/in.h>
        #include <string.h>
        #include <arpa/inet.h>
        #include <unistd.h>
        
        #define SERVER_PORT 8888
        
        /*
         *socket
         *sendto
         */
        
        int main(int argc, char **argv)
        {
            int iSocketClient;
            int iRet;
            int iSendLen;
            int iAddrLen;
        
        
            struct sockaddr_in tSocketServerAddr;
            unsigned char ucSendBuf[1000];
        
            if (argc != 2)
            {
                printf("Usage:\n");
                printf("%s <server_ip>\n", argv[0]);
                return -1;
            }
            iSocketClient = socket(AF_INET, SOCK_DGRAM, 0);
            if (-1 == iSocketClient)
            {
                printf("socket error\n");
                return -1;
            }
        
            tSocketServerAddr.sin_family      = AF_INET;
            tSocketServerAddr.sin_port        = htons(SERVER_PORT); //host to net short
            //tSocketServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
            if(0 == inet_aton(argv[1], &tSocketServerAddr.sin_addr))
            {
                printf("invalid server_ip\n");
                return -1;
            }
        
        
            while (1)
            {
                if(fgets(ucSendBuf, 999, stdin))
                {
                    iAddrLen = sizeof(struct sockaddr);
                    iSendLen = sendto(iSocketClient, ucSendBuf, strlen(ucSendBuf), 0,
                              (const struct sockaddr*)&tSocketServerAddr, iAddrLen);
                    if (iSendLen <= 0)
                    {
                        close(iSocketClient);
                        return -1;
                    }
                }
                }
            return 0;
        }
        
Python 网络编程 TCP/UDP 详细基础 1 基础概念 1.1 Linux Windows 命令行查看网络信息 Linux: ifconfig windows: ipconfig 开/关网卡:sudo ifconfig ###(网卡名) up/down 1.2 IP地址 IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 IP地址即在网络中标识一台. 阅读详情

相关推荐

Linux网络编程:TCP与UDP详解

本文深入探讨了Linux网络编程中的TCP和UDP协议,包括它们的基本概念、使用方法和通信过程。文章通过示例代码、时序图和异常情况处理,帮助读者全面理解TCP和UDP在服务器编程中的应用。

陆业聪 1954

网络编程(TCP、UDP)

网络编程(1)网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。(2)在程序员层面上,即要写一个应用程序通过调用传输层提供的API实现网络通信。

wuweixiaoyue的博客 2871

网络编程:TCP 与 UDP 的区别

1.TCP与UDP在概念上的区别: Tcp是一种面向连接的,可靠的字节流服务。(设有数据包编号与差错控制机制。) 特点: 由于网络的复杂性,传输信息时,数据包可能会丢失,差错控制中的确认机制在接收到数据包是发送确认信息,若是数据包丢失,则回发数据包编号,让对方重新发送; 由于网络的复杂性,传输信息时有多种网络传送途径可以选择,数据包被接收的顺序与发送顺序不同,可以根据数据包的编号,

5597

【Python】网络编程之UDP、TCP

Socket的英文原义是“孔”或“插座”,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket),socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。基本上,Socket 是任何一种计算机网络通讯中最基础的内容。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

AXI_IIC调试实战:从失败到成功的读写操作经验分享

本文分享了调试Xilinx AXI_IIC IP核从失败到成功的实战经验。文章详细解析了IP核以FIFO和状态机为核心的工作机制,强调了状态寄存器查询与延时等待的关键作用,并提供了针对EEPROM的单字节读写操作完整代码与避坑指南,帮助开发者高效完成AXI_IIC读写操作。

weixin_29169505的博客 371

OpenCV形状检测

开始定义我们的ShapeDetector类。我们将跳过这里的init构造函数,因为不需要初始化任何东西。#导入必要的包importcv2classShapeDetector#初始化形状名称并近似轮廓shape="unidentified"peri=cv2.arcLength(c,True)approx=cv2.approxPolyDP(c,0.04*peri,True)我们的检测方法,它只需要一个参数c,即我们试图识别的形状的轮廓。...

weixin_43229348的博客 9424

基于TCP与UDP网络编程

基于TCP与UDP简单编程

qq_59616295的博客 1223

树莓派驱动DLPDLCR230NPEVM+framebuffer显示图片

DLPDLCR230NPEVM DLP® LightCrafter™ Display 230NP 是一个易于使用的紧凑型即插即用评估平台,适用于消费类产品、工业、医疗和物联网 (IoT) 市场中的各种超便携显示应用。此评估模块 (EVM) 采用 DLP230NP 芯片组,该芯片组由DLP230NP.23 1080p DMD、DLPC3436显示控制器和DLPA2005PMIC/LED 驱动器组成。此 EVM 外形小巧,配备生产就绪型光学引擎以及支持 18 位 RGB 并行视频接口...

L_Y000的博客 2618

UDP和TCP网络编程

首先是在硬盘中写入数据(请求),为了提高效率,数据被写入缓存区,缓存区有一个特性就是满了才会将数据进行统一提交(提交到网卡),这样才能读到请求。当计算机需要执行或者读取某个文件时,会将一部分数据加载到缓存中,下一次需要的时候,直接从缓存中获取即可,避免了不必要的磁盘读写操作,提高访问速度。一样的,可以用于存放数据的容器。根据请求数据计算响应数据,为了更简单的包装请求,不需要一个一个字节去计算,所以这里设置为字符串类型。根据请求计算响应数据,因为我们的服务是回显服务,所以只需要返回请求即可。

闲来垂钓碧溪上的博客 3026

STM32F4实战:手把手教你实现USB OTG双模式切换(Host/Slave)

本文详细介绍了如何在STM32F4上实现USB OTG双模式切换(Host/Slave),包括硬件架构解析、软件实现机制、主机模式下的U盘读写以及从机模式下的自定义设备开发。通过实战案例和优化技巧,帮助开发者快速掌握USB双角色功能,提升嵌入式系统开发的灵活性和效率。

u9v0w的博客 730

命令行执行YOLO训练命令报错:1.PermissionError: [WinError 5] 拒绝访问 2.OMP: Error#15: Initializing libiomp5md.dll...

(已解决!)报错:1.PermissionError: [WinError 5] 拒绝访问 2.OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

Gpengyuyan的博客 1125

网络编程 UDP 和 TCP

介绍了网络编程的基本概念和Socket介绍,并介绍Java中UDP和TCP使用,通过一个UDP和TCP分别实现的回显服务器来练习

2401_89019969的博客 1461

.NET+Vue企业级RBAC权限平台:开箱即用的生产就绪方案

RBAC(基于角色的访问控制)是企业系统安全治理的基础模型,其核心在于将用户、角色与权限解耦,通过动态能力组合实现细粒度管控。在真实工程中,RBAC需突破静态角色限制,支持时间维度授权、前后端双重鉴权、行级数据范围控制等关键能力。本文聚焦于一套已落地金融、政务、制造等多行业的生产级实现——基于.NET Minimal API与Vue 3的前后端分离架构,提供菜单/按钮/接口/数据四层权限控制,内置滑动过期JWT、Redis权限缓存、动态路由加载与权限指令等开箱即用能力,显著降低权限配置与审计成本。

weixin_33326218的博客 276

TCP、UDP 网络编程

TCP、UDP 网络编程 实验目的 1.使用 TCP 进行套接字通信 2.使用 UDP 进行套接字通信 实验原理 1.TCP 2.UDP 3.用到的 API (1)int socket(int domain, int type, int protocol); 根据指定的地址族、数据类型和协议来分配一个 socket 的描述字及其所用的资源。 domain:协议族,常用的有 AF_INET、A...

汪汪的博客 1688

解锁RK平台黑科技:DPDK加速与硬件卸载实战

本文探讨了在RK平台上通过DPDK加速与硬件卸载技术构建高性能网络架构的方法。RK平台凭借强大的硬件性能为高并发网络处理提供基础,而DPDK通过用户态驱动、轮询机制等技术绕过内核瓶颈,显著提升数据包处理效率。硬件卸载则将校验和计算等任务交由专用硬件,释放CPU资源。实践案例显示,该方案可使网络吞吐量提升至理论极限,延迟降至5ms以下,CPU利用率降低40%。文章详细介绍了配置步骤、优化方法和常见问题解决方案,并展望了该技术在5G、车联网等新兴领域的应用前景。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1280

【报错】(pycharm运行程序)OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading

1 报错 OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading 2 分析原因 通过 activate Distance 进行自己创建的 Distance 虚拟环境中,输入python会显示环境中python的版本信息,再依次import,显然不会报错。 这是因为在Anaconda的环境下有支持 import torch 的 dll,而在PyCharm中使用的是自己创建的新环境,还缺少相应支持的dll,仅需在PyCharm中配置环境变量。.

静谧、淡雅 8623

网络编程 —— TCP 和 UDP 编程详解

网络编程 —— TCP 和 UDP 编程详解 网络编程主要函数介绍 TCP和 UDP 原上的区别TCP 编程 UDP 编程

wei_Embedded_z的博客 2739

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

网络编程TCP与UDP

(1)为了更好应对和苏联的军事竞赛,1958美国成立了ARPA部门,开发了内部联网技术- ARPANET(因特网的前身)方便不同部门之间可以快速沟通,开发ncp协议作为早期网络的通信协议。(2)70年代末,随着链接ARPANET的电脑节点不断增加,美国开发了tcp/ip,并代替旧的网络通信协议(ncp)作为军事内部的标准通信协议(3)1983,ARPANET分裂成军用和民用两部分,民用部分随着全社会的加入,因特网从而开始崭露头角,这个是离不开tcp\ip协议的推进。(4)1984,国际标准化组织(iso)发

qq_59805046的博客 2387

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【JavaEE】网络编程 TCP/UDP

网络编程~~~

做梦都想要三十万年薪~ 1851

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java网络编程之UDP和TCP套接字

介绍使用Java如何进行网络编程, 主要有UDP和TCP两种方式; UDP的特点是无连接, 不可靠传输, 面向数据报, 全双工; TCP的特点是有连接, 可靠传输, 面向字节流, 全双工.

trong_ 的烂笔头 3791

TCP和UDP网络编程

TCP和UDP协议是TCP/IP协议的核心。TCP 传输协议:TCP 协议是一TCP (Transmission ControlProtocol)和UDP(User DatagramProtocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。

专治八阿哥的孟老师 1603

Java:TCP/UDP网络编程

TCP与UDP简单上手

qq_73698057的博客 1708

[网络编程]TCP和UDP的比较 及 通过java用UDP实现网络编程

前面我们知道, UDP是无连接的, 所以本身并没有存储对方的ip和端口信息, 但是上述我们用来接收数据的DatagramPacket中, 存放了客户端的ip和接口, 所以我们可以通过getSocketAddress()方法来获取到。我们现在只是进行一个简单的实现, 服务器收到客户端请求后, 无需做什么, 客户端请求啥, 直接响应啥, 这种程序, 就叫做"回显"(Echo)系统中的socket, 可以理解成是一种"文件", socket文件, 可以视为是"网卡"这种硬件设备的抽象表现形式。

m0_73992740的博客 1212

Java网络编程之UDP与TCP的网络编程

本文将介绍java中的网络编程,常见的网络编程方式有两种,一种是UDP,另外一种是TCP,其中UDP的服务器与客户端之间不需要建立连接就能进行通信,而TCP需要先建立服务器与客户端之间的连接才能进行通信,此外TCP与UDP不能进行通信。

未见花闻的博客 2634

网络编程(TCP UDP)

网络编程使得不同计算机之间可以有效地交换数据。它为数据传输提供了协议和标准,使得在网络上传输数据变得简单而高效。网络编程实现了客户端-服务器模型,这是现代应用程序架构的基础。客户端请求服务,服务器提供服务。

2201_75493615的博客 1107

TCP/UDP网络编程

TCP/UDP网络编程 sf2gis@163.com 2012年2月07日   1  概述 1.1 IP,Port与Protocol IP:网络上每个主机的唯一标识号 Port:用于标识系统中每个应用的标识号;IPV4:32位,4个字节组成; IP与Port组合在一起可以确定一个唯一的应用; 协议:是用来规定通信双方的数据规则的. 1.2 ISO/OSI七层模型: 应用层->

弗里曼的小伙伴 1430
上一篇: 操作系统学习笔记
下一篇: 嵌入式C语言
彦祖学嵌入
博客等级 码龄4年 91粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值