test1.c

来自「学习linux的软件」· C语言 代码 · 共 83 行

C
83
字号
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <errno.h>#include <arpa/inet.h>#define BUFFER_SIZE	1024int main(int argc, char **argv){  int fd;  if (argc < 3)  {    fprintf(stdout, "Usage: %s <ip> <port>\n", argv[0]);    return 0;  }  if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) < 0)  {    fprintf(stderr, "Create new UDP socket failed: %s\n", strerror(errno));    exit(1);  }#ifdef _DEBUG_  fprintf(stdout, "Create a new UDP socket %d\n", fd);#endif  struct sockaddr_in server_address;  memset(&server_address, 0, sizeof(server_address));  server_address.sin_family = PF_INET;  server_address.sin_port = htons(atoi(argv[2]));  server_address.sin_addr.s_addr = inet_addr(argv[1]);  //int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);  if (bind(fd, (struct sockaddr *) &server_address, sizeof(server_address)) < 0)  {    fprintf(stderr, "Bind failed: %s\n", strerror(errno));    close(fd);    exit(1);  }#ifdef _DEBUG_  fprintf(stdout, "Bound on %s:%d\n", argv[1], atoi(argv[2]));#endif  char buf[BUFFER_SIZE];  struct sockaddr_in peer_address;  socklen_t peer_address_length;  ssize_t n;  peer_address_length = sizeof(peer_address);  for (;;)  {    memset(buf, 0, sizeof(buf));    //ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);    n = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *) &peer_address, &peer_address_length);#ifdef _DEBUG_    fprintf(stdout, "Read %d bytes from %s:%d\n", n, inet_ntoa(peer_address.sin_addr), ntohs(peer_address.sin_port));#endif    fprintf(stdout, "Message from peer: %s\n", buf);    //ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);    n = sendto(fd, buf, n, 0, (struct sockaddr *) &peer_address, peer_address_length);#ifdef _DEBUG_    fprintf(stdout, "Write %d bytes to %s:%d\n", n, inet_ntoa(peer_address.sin_addr), ntohs(peer_address.sin_port));#endif  }  close(fd);  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?