linux 下可用 c 进行 udp 通信,使用 server / client,
例子:
* server
/** * udp server * @date: 2011-4-1 下午03:34:27 * @author: eric */ #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> static int SERVER_PORT = 10002; static int MAX_REQUEST_QUEUE = 5; static int MAX_DATA_SIZE = 100; /** * start udp server */ int udpserver() { int sockfd, newfd; struct sockaddr_in server_addr, client_addr; char buf[MAX_DATA_SIZE + 1]; // create socket sockfd = socket(AF_INET, SOCK_DGRAM, 0); // set server address server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = INADDR_ANY; // bind if (bind(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr)) == -1) { perror("bind error\n"); return 1; } int recv_size; int sin_size = sizeof(struct sockaddr_in); while (1) { // recvfrom if ((recv_size = recvfrom(sockfd, buf, MAX_DATA_SIZE, 0, (struct sockaddr *) &client_addr, &sin_size)) == -1) { perror("recvfrom error\n"); continue; } if (recv_size) { buf[recv_size] = '\0'; printf("receive:\t %s ,from %s:%d\n", buf, inet_ntoa(client_addr.sin_addr), client_addr.sin_port); } char *s_send = "hi client!"; // sendto if (sendto(sockfd, s_send, strlen(s_send), 0, (struct sockaddr *) &client_addr, sin_size) == -1) { perror("sendto error\n"); continue; } else { printf("send:\t%s\n", s_send); } printf("\n"); } return 0; } int main() { return udpserver(); }
* client
/** * udp client * @date: 2011-4-1 下午03:39:12 * @author: eric */ #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> static char *SERVER_HOST = "127.0.0.1"; static int SERVER_PORT = 10002; static int MAX_DATA_SIZE = 100; /** * start udp client */ int udpclient() { int sockfd; struct sockaddr_in server_addr; char buf[MAX_DATA_SIZE + 1]; // create socket sockfd = socket(AF_INET, SOCK_DGRAM, 0); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = inet_addr(SERVER_HOST); // connect if ((connect(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr))) == -1) { perror("connect error\n"); return 1; } else { printf("connected to server %s:%d\n", inet_ntoa(server_addr.sin_addr), ntohs(server_addr.sin_port)); } char *s_send = "hi server!"; // send data if ((write(sockfd, s_send, strlen(s_send))) == -1) { perror("write error\n"); return 1; } else { printf("send:\t%s\n", s_send); } int recv_size; // receive data if ((recv_size = read(sockfd, buf, MAX_DATA_SIZE)) == -1) { perror("read error\n"); return 1; } if (recv_size) { buf[recv_size] = '\0'; printf("receive:\t%s\n", buf); } // close socket close(sockfd); return 0; } int main() { return udpclient(); }