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;
}
相关推荐
野指针YZZ2 分钟前
一键配置RK3588网络与SSH远程连接
网络·ssh·rk3588
迎仔27 分钟前
10-网络安全监控与事件响应:数字世界的智能监控与应急系统
网络·安全·web安全
上海合宙LuatOS1 小时前
LuatOS核心库API——【audio 】
java·网络·单片机·嵌入式硬件·物联网·音视频·硬件工程
深圳市恒星物联科技有限公司2 小时前
水质流量监测仪:复合指标监测的管网智能感知设备
大数据·网络·人工智能
科技块儿3 小时前
2026年我会推荐哪些IP归属地查询网站?
网络·ip地址·ip归属地·运维工具·网络工具·实用网站·2026工具推荐
米羊1213 小时前
已有安全措施确认(中)
网络
迎仔4 小时前
A-算力中心网络隔离总览:数字世界的“酒店房间“
网络
宝塔面板4 小时前
AllinSSL 一站式搞定 SSL 自动续期:永久免费,开源可自托管
网络·网络协议·ssl
csdn今天倒闭了吗4 小时前
飞牛lucky配置ipv6 ddns+ssl+反向代理
网络·网络协议·ssl
强风7944 小时前
Linux-网络层
网络