linux:UDP(用户数据报协议)1、客户端和服务器连接并通信客户端,向服务器发送数据2、实现回传。服务器收到客户端的数据之后,将数据返传给客户端

发布于:2022-12-28 ⋅ 阅读:(418) ⋅ 点赞:(0)

客户端udp_client.c

/*===============================================
 *   文件名称:udp_client.c
 *   创 建 者:     
 *   创建日期:2022年09月05日
 *   描    述:
 ================================================*/
#include <stdio.h>
#include  <sys/types.h> /* See NOTES*/
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#define SIZE 64
int main(int argc, char *argv[])

    char buf[SIZE]={0};
    int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    if(-1==sockfd)
    {
        perror("socket");
        return -1;
    }

    struct sockaddr_in saddr;//服务器的ip和port
    bzero(&saddr,sizeof(saddr));
    saddr.sin_family=AF_INET;//ipv4协议
    saddr.sin_port=htons(8888);//5001~65535 服务器的端口号
    saddr.sin_addr.s_addr=inet_addr("192.168.31.122");//服务器的ip地址
    struct sockaddr_in addr;//接收方的信息
    bzero(&addr,sizeof(addr));
    socklen_t len =sizeof(addr);
do{
    fgets(buf,sizeof(buf),stdin);
int ret =sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&saddr,sizeof(saddr));//发送数据
    if(ret==-1)
    {
        perror("sendto");
        close (sockfd);
        return -1;
    }


     printf("..........sendto............\n");
     bzero(buf,sizeof(buf));
    ret= recvfrom(sockfd,buf,sizeof(buf),0,(struct  sockaddr*)&addr,&len);
    if(-1==ret)
    {
      perror("recvfrom");
      return -1;
    }
    printf("IP:%s port:%u\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));

    puts(buf);
}
while(strncmp(buf,"quit",4)!=0);
close (sockfd);
     /*
        recvfrom();
        sendto();*/
    return 0;

服务器 udp_server.c

/*===============================================
 *   文件名称:udp_server.c
 *   创 建 者:     
 *   创建日期:2022年09月05日
 *   描    述:
 ================================================*/
#include <stdio.h>
#include  <sys/types.h> /* See NOTES*/
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#define SIZE 64
int main(int argc, char *argv[])

    char buf[SIZE]={0};
    int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    if(-1==sockfd)
    {
        perror("socket");
        return -1;
    }

    struct sockaddr_in saddr;//服务器的ip和port
    bzero(&saddr,sizeof(saddr));
    saddr.sin_family=AF_INET;//ipv4协议
    saddr.sin_port=htons(8888);//5001~65535 服务器的端口号
    saddr.sin_addr.s_addr=inet_addr("192.168.31.122");//服务器的ip地址

    int ret=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
    if(-1==ret)
    {
        perror("bind");
        return -1;
    }
    printf("bind success!\n");
    struct sockaddr_in addr;//接收方的信息
    bzero(&addr,sizeof(addr));
    socklen_t len =sizeof(addr);
do{
    bzero(buf,sizeof(buf));
    ret =recvfrom (sockfd,buf,sizeof(buf),0,(struct sockaddr*)&addr,&len);//接受数据
    if(ret==-1)
    {
        perror("recvfrom");
        close (sockfd);
        return -1;
    }
      printf("接收信息:%s\n",buf);
     printf("..................recvfrom.............\n");
     ret=sendto (sockfd,buf,sizeof(buf),0,(struct sockaddr*)&addr,sizeof(addr));
     if(-1==ret)
     {
       perror("sendto");
       return -1;
     }    
      printf("IP:%s port:%u\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));  
}
     while(strncmp(buf,"quit",4)!=0); 
     close(sockfd);
    return 0;

运行及结果:

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到