TCP、UDP

端口号:

端口号: 16位数值(unsigned short ) //0~65535 (65536个数)

//标示一个进程

TCP和 UDP 的端口号是独立的

端口号:

(1)

作用:唯一的标识一个进程

每一个应用程序进程有一个端口号,

通讯时区分数据包属于哪个应用程序进程

http协议用到的端口号:80

在配置tcp和udp通信的地址和端口号时,因为

1.网络协议在底层使用二进制格式来表示数据。IP地址和端口号在内存中以二进制形式存储,以便于计算机处理和网络设备识别。

2.不同的计算机系统可能使用不同的字节序(大端或小端)。使用这些转换函数可以确保数据在不同系统间传输时保持一致性。

udp:特点:无连接、不可靠

tcp:特点:面向连接、可靠传输

使用udp进行模拟通信的过程:

客户端:socket --- > //fgets(实现多次通信)----> sendto ----> recvfrom ---->printf

服务器端:socket --->bind ----> recvfrom //保存了客户端的地址 srcaddr----> sprintf ---->sendto // srcaddr

2.查看地址

//linux

ifconfig //查看网卡相关信息 --- 包含ip地址

//windows 下 cmd

ipconfig /all

tcp的c/s架构模拟:

1.建立连接(socket --->bind ---> listen --->accept)

2.通信过程(read --->write --->close)

tcp如何建立连接:

tcp三次握手:

客户端 服务器

-----我要和你建立连接--->

<----好的,可以建立连接--

-----好 ---------------->

断开连接:

tcp四次挥手:

客户端 服务器

-----我要和你断开连接--->

<----好的,可以断开------

<----我也要断开----------

-----好 ---------------->

函数原型:

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能:该函数固定有客户端使用,表示从当前主机向目标

主机发起链接请求。

参数:sockfd 本地socket创建的套接子id

addr 远程目标主机的地址信息。

addrlen: 参数2的长度。

返回值:成功 0

失败 -1

练习:

使用tcp协议,实现server收到信息后回发

server

复制代码
#include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <sys/types.h>
 #include<stdio.h>
 #include <string.h>
 #include <unistd.h>
 int main(int argc,char *argv[])
 {
     int listen_fd = socket(AF_INET,SOCK_STREAM,0);

     struct sockaddr_in seraddr;
     seraddr.sin_family = AF_INET;
     seraddr.sin_port = htons(50000);
     seraddr.sin_addr.s_addr = inet_addr("192.168.206.128");

     if(bind(listen_fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)
     {
         perror("bind fail");
         return -1;
     }

     if(listen(listen_fd,5) < 0)
     {
         perror("listen error");
         return -1;
     }

     int connfd = accept(listen_fd,NULL,NULL);

     if(connfd < 0)
     {
         perror("accept error");
         return -1;
     }

     printf("connfd = %d\n",connfd);

     char buf[1024];
     char buf1[1024];

     while(1)
     {
         read(connfd,buf,sizeof(buf));
         sprintf(buf1,"server + %s\n",buf);
         write(connfd,buf1,strlen(buf1)+1);
         printf("%s\n",buf);
     }

     return 0;
 }

client

复制代码
#include <stdio.h>
int main(int argc,char *argv[])
{
    int soc_fd = socket(AF_INET,SOCK_STREAM,0);
    if(soc_fd < 0)
    {
        perror("socket fail");
        return -1;
    }

    struct sockaddr_in seraddr;
    seraddr.sin_family = AF_INET;
    seraddr.sin_port = htons(50000);
    seraddr.sin_addr.s_addr = inet_addr("192.168.206.128");

    struct sockaddr_in srcaddr;
    socklen_t addrlen = sizeof(srcaddr);

    if (connect(soc_fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)
    {
        perror("connect fail");
    }
    char buf[1024];
    char buf1[1024];
    while(1)
    {
        fgets(buf,sizeof(buf),stdin);
        write(soc_fd,buf,strlen(buf)+1);
        read(soc_fd,buf,sizeof(buf));
        printf("%s\n",buf);
    }
    return 0;
}
相关推荐
惜.己1 小时前
appium中urllib3.exceptions.LocationValueError: No host specified. 的错误解决办法
网络·appium
吉凶以情迁2 小时前
window服务相关问题探索 go语言服务开发探索调试
linux·服务器·开发语言·网络·golang
专注VB编程开发20年2 小时前
UDP受限广播地址255.255.255.255的通信机制详解
网络·udp·智能路由器
189228048613 小时前
NX947NX955美光固态闪存NX962NX966
大数据·服务器·网络·人工智能·科技
Sadsvit4 小时前
Linux 进程管理与计划任务
linux·服务器·网络
一碗白开水一4 小时前
【模型细节】FPN经典网络模型 (Feature Pyramid Networks)详解及其变形优化
网络·人工智能·pytorch·深度学习·计算机视觉
什么都想学的阿超5 小时前
【网络与爬虫 38】Apify全栈指南:从0到1构建企业级自动化爬虫平台
网络·爬虫·自动化
D-海漠6 小时前
安全光幕Muting功能程序逻辑设计
服务器·网络·人工智能
都给我7 小时前
可计算存储(Computational Storage)与DPU(Data Processing Unit)的技术特点对比及实际应用场景分析
运维·服务器·网络·云计算
阿蒙Amon7 小时前
详解Python标准库之互联网数据处理
网络·数据库·python