`

linux c udp

阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics