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();
}
472

被折叠的 条评论
为什么被折叠?



