Skip to content
On this page

广播发送端代码


标签:代码片段C/unix  

Code:hqyj/network/04_多点通信/03_broadSnd.c

c
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>

#define ERR_MSG(msg)                        \
  do {                                      \
    fprintf(stderr, "line %d\n", __LINE__); \
    perror(msg);                            \
  } while (0)

#define PORT 6666
#define IP "192.168.31.255"

int main(int argc, char const *argv[]) {
  // 创建报式套接字
  int cfd = socket(AF_INET, SOCK_DGRAM, 0);
  if (cfd < 0) {
    ERR_MSG("socket");
    return -1;
  }
  printf("socket create success cfd=%d __%d__\n",
         cfd, __LINE__);

  // 设置允许广播
  int broad = 1;
  if (setsockopt(cfd, SOL_SOCKET, SO_BROADCAST,
                 &broad, sizeof(broad)) < 0) {
    ERR_MSG("setsockopt");
    return -1;
  }
  printf("boradcast success\n");

  // 填充服务器的地址信息结构体,绑定到套接字上
  struct sockaddr_in sin;
  sin.sin_family = AF_INET;             // 必须填充 AF_INET
  sin.sin_port = htons(PORT);           // 1024~49151
  sin.sin_addr.s_addr = inet_addr(IP); 

  char buf[128] = "";
  ssize_t res = 0;

  while (1) {
    bzero(buf, sizeof(buf));
    // 发送数据
    printf("请输入>>>");
    fgets(buf, sizeof(buf), stdin);
    buf[strlen(buf) - 1] = 0;
    if (sendto(cfd, buf, sizeof(buf), 0,
               (struct sockaddr *)&sin, sizeof(sin)) < 0) {
      ERR_MSG("sendto");
      return -1;
    }
    printf("sendto success\n");
  }
  // 关闭套接字
  close(cfd);
  return 0;
}

Last updated: