进程间通信--UDP

本文主要探讨了使用UDP协议进行进程间通信的方法,涉及到sizeof运算符在结构体中的应用、socket编程基本概念以及如何实现进程间的可靠数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Server.c

#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <netinet/in.h>  
#include <arpa/inet.h>  
  
int main(void)  
{  
    //create socket  
    int fd = socket(AF_INET, SOCK_DGRAM, 0);  
    if(fd==-1)  
    {  
        perror("socket\n");  
        exit(-1);  
    }  
    printf("socket fd=%d\n",fd);  
  
    //build connection address  
    struct sockaddr_in addr;  
    addr.sin_family = AF_INET;  
    addr.sin_port = htons(6666);  
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");  
  
    int r;  
    r = bind(fd,(struct sockaddr*)&addr,sizeof(addr));  
    if(r==-1)  
    {  
        perror("bind");  
        close(fd);  
        exit(-1);  
    }  
    printf("bind address successful!\n");  
    //accept or send message  
    char buf[255];  
    struct sockaddr_in from;  
    socklen_t len;  
    len = sizeof(from);  
    while(1)  
    {  
        r = recvfrom(fd,buf,sizeof(buf)-1,0,(struct sockaddr*)&from,&len);  
        if(r>0)  
        {  
            buf[r]=0;  
            printf("The message from %s is:%s\n",inet_ntoa(from.sin_addr),buf);  
        }  
        else  
        {  
            break;  
        }  
    }  
    //close socket  
    close(fd);  
    return 0;  
}  

Client.c

#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <string.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <arpa/inet.h>  
  
int main(void)  
{  
    //create socket  
    int fd = socket(AF_INET,SOCK_DGRAM,0);  
    if(fd==-1)  
    {  
        perror("socket");  
        exit(-1);  
    }  
    printf("create socket OK!\n");  
    //create an send address  
    struct sockaddr_in addr={};  
    addr.sin_family = AF_INET;  
    addr.sin_port = htons(6666);  
    addr.sin_addr.s_addr=inet_addr("127.0.0.1");  
    //send the message to the specify address  
    int r;  
    char buf[255];  
    while(1)  
    {  
        r = read(0,buf,sizeof(buf)-1);  
        if(r<=0)  
            break;  
        sendto(fd,buf,r,0,(struct sockaddr*)&addr,sizeof(addr));  
    }  
    //close socket  
    close(fd);  
    return 0;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值