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();
}
分享到:
相关推荐
这个是linux下,用c语言写的客户端和服务器通信的udp程序
udp实现聊天室功能 采用linux c编程 socket 服务器可以给所有在线的人发送群广播。 上线,下线提醒功能。 程序代码和运行文件, 还有使用说明,本程序在linux系统中完美运行。
Linux下的udp广播程序,含客户端和服务器。
Linux UDP 编程 适用于嵌入式ARM开发板
基于linux网络C语言编程-UDP组播
主要介绍了Linux UDP socket 设置为的非阻塞模式与阻塞模式区别的相关资料,需要的朋友可以参考下
Linux下基于UDP的socket编程,适用多客户端之间,服务器与客户端之间的通信。客户端和服务端代码分开了。notepad++可打开
在linux下的udp通信,采用c语言编写,可实现简单的文件下载与上传,适用于初学者
linux下的网卡测速程序,使用udp编写,同时也是一个很好的linux网络编程范例,cudp为客户端程序,而sudp为服务器程序
在linux系统下开发的,简易聊天工具,开启两个终端,进行聊天
Linux下udp多播程序,含客户端和服务器以及Makefile
在linux下采用epoll的方式用C实现高斌发服务器,直接编译可以运行
在linux下实现的udp协议的传输,调试通过的,
可以 直接输入ip 端口号int main(int argc, char *argv[]) { int sockfd; char buf[N]; struct sockaddr_in servaddr;
linux下 c语言实现 udp方式p2p文件传输
UDPlinux向windows传输文件 可以成功运行。本人个人调试。请尊重本人知识产权
linux下的udp通信,有客户端和服务器以及Makefile.
linux UDP编程总结和实例
linux下tcp udp编程 小例子