socket通信之 udp协议2

服务端

步骤:
1. 创建套接字
2. 绑定ip
3. 读取数据

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <linux/in.h>


#define SRV_PORT 9999


int main(int argc, char *argv[])
{

    // create a socket
    int srv_fd;
    int ret;
    char buf[128];

    srv_fd = socket(AF_INET, SOCK_DGRAM, 0);   //创建套接字
    if(srv_fd < 0)
    {
    perror("socket");
    exit(1);
    }


    // bind addr
    struct sockaddr_in  self;                 //描述本地ip和端口的信息
    self.sin_family = AF_INET;
    self.sin_port = htons(SRV_PORT);
    //self.sin_addr.s_addr = inet_addr("192.168.7.5"); //本机器的ip
    self.sin_addr.s_addr = htonl(INADDR_ANY); //本机器的所有ip
    ret = bind(srv_fd, (const struct sockaddr *)&self, sizeof(self));  //绑定ip
    if(ret < 0)
    {
    perror("bind");
    exit(1);
    }

    struct sockaddr_in info;
    socklen_t len = sizeof(info);

    while(1)
    {

    //直接读取数据
    ret = recvfrom(srv_fd, buf, 128, 0, (struct sockaddr *)&info, &len);   //读取信息
    if(ret < 0)
    {
        perror("read");
        exit(1);
    }

    buf[ret] = '\0';
    printf("from client %s (port %d) : %s\n", inet_ntoa(info.sin_addr), ntohs(info.sin_port), buf);

  }


    close(srv_fd);

    return 0;

}

客户端
步骤:
1. 创建套接字
2. 发送信息


#include <stdio.h>
#include <string.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <linux/in.h>


#define SRV_PORT 9999
#define SRV_IP  "192.168.7.5"

int main(int argc, char *argv[])
{

    // create socket
    int ret;
    int count = 5;
    //char *content = "hello server, come on baby";
    char wbuf[128];

    if(argc < 2)
    {
    printf("usage :  ./client  serverip\n");  
    exit(1);
    }


    int fd = socket(AF_INET, SOCK_DGRAM, 0);    //创建套接字
    if(fd < 0)
    {
    perror("socket");
    exit(1);
    }

    struct sockaddr_in peer;
    peer.sin_family = AF_INET;
    peer.sin_port = htons(SRV_PORT);
    //inet_aton(SRV_IP, &peer.sin_addr);    
    inet_aton(argv[1], &peer.sin_addr);    


    while(1)
    {
    printf("dear, pls input your words : \n");
    fgets(wbuf, 128, stdin);

    ret = sendto(fd, wbuf, 128, 0, (struct sockaddr *)&peer, sizeof(peer));    //发送信息
    if(ret < 0)
    {
        perror("sendto");
        exit(1);
    }
    } 


    close(fd);

    return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值