TCP、UDP

[复制链接]
发表于 2026-2-1 22:59:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
端标语:
    端标语:  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
  1. #include <sys/socket.h>
  2. #include <netinet/in.h>
  3. #include <arpa/inet.h>
  4. #include <sys/types.h>
  5. #include<stdio.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. int main(int argc,char *argv[])
  9. {
  10.      int listen_fd = socket(AF_INET,SOCK_STREAM,0);
  11.      struct sockaddr_in seraddr;
  12.      seraddr.sin_family = AF_INET;
  13.      seraddr.sin_port = htons(50000);
  14.      seraddr.sin_addr.s_addr = inet_addr("192.168.206.128");
  15.      if(bind(listen_fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)
  16.      {
  17.          perror("bind fail");
  18.          return -1;
  19.      }
  20.      if(listen(listen_fd,5) < 0)
  21.      {
  22.          perror("listen error");
  23.          return -1;
  24.      }
  25.      int connfd = accept(listen_fd,NULL,NULL);
  26.      if(connfd < 0)
  27.      {
  28.          perror("accept error");
  29.          return -1;
  30.      }
  31.      printf("connfd = %d\n",connfd);
  32.      char buf[1024];
  33.      char buf1[1024];
  34.      while(1)
  35.      {
  36.          read(connfd,buf,sizeof(buf));
  37.          sprintf(buf1,"server + %s\n",buf);
  38.          write(connfd,buf1,strlen(buf1)+1);
  39.          printf("%s\n",buf);
  40.      }
  41.      return 0;
  42. }
复制代码
client
  1. #include <stdio.h>
  2. int main(int argc,char *argv[])
  3. {
  4.     int soc_fd = socket(AF_INET,SOCK_STREAM,0);
  5.     if(soc_fd < 0)
  6.     {
  7.         perror("socket fail");
  8.         return -1;
  9.     }
  10.     struct sockaddr_in seraddr;
  11.     seraddr.sin_family = AF_INET;
  12.     seraddr.sin_port = htons(50000);
  13.     seraddr.sin_addr.s_addr = inet_addr("192.168.206.128");
  14.     struct sockaddr_in srcaddr;
  15.     socklen_t addrlen = sizeof(srcaddr);
  16.     if (connect(soc_fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)
  17.     {
  18.         perror("connect fail");
  19.     }
  20.     char buf[1024];
  21.     char buf1[1024];
  22.     while(1)
  23.     {
  24.         fgets(buf,sizeof(buf),stdin);
  25.         write(soc_fd,buf,strlen(buf)+1);
  26.         read(soc_fd,buf,sizeof(buf));
  27.         printf("%s\n",buf);
  28.     }
  29.     return 0;
  30. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表