linux socket编程服务端模型(用getaddrinfo)
来源:互联网 发布:word for mac 在哪里 编辑:程序博客网 时间:2024/06/03 18:14
//server_wait.c
#include "unistd.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "netinet/in.h"
#include "arpa/inet.h"
#include "stdio.h"
#include "string.h"
#include <netdb.h>
#include <stdarg.h>
#include <errno.h>
#include <sys/utsname.h>
void error(int status, int err,char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
if(err)
fprintf(stderr,":%s(%d)/n",strerror(err),err);
if(status)
exit(status);
}
int server_wait(const char *hostname,const char *service,const char *protocol){
int sockfd,err;
struct addrinfo hints,*res,*r;
bzero(&hints,sizeof(struct addrinfo));
hints.ai_family=AF_INET;
if(strcmp(protocol,"udp")==0)
hints.ai_socktype=SOCK_DGRAM;
else if(strcmp(protocol,"tcp")==0)
hints.ai_socktype=SOCK_STREAM;
err=getaddrinfo(hostname,service,&hints,&res);
if(err){
printf("%s/n",gai_strerror(err));
exit(0);
}
for( r = res; r; r = r->ai_next) {
if((sockfd=socket(r->ai_family,r->ai_socktype,r->ai_protocol))<0)
continue;
if(bind(sockfd,r->ai_addr,r->ai_addrlen)==0)
break;
close(sockfd);
}
if(r==NULL)
error(1,0,"error!!/n");
if((r->ai_socktype==SOCK_STREAM)&&(listen(sockfd,5)<0))
error(1,0,"listen error!");
freeaddrinfo(res);
return sockfd;
}
//udpserver.c
#include <stdarg.h>
#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
void process_server(int s) {
struct sockaddr_in remote;
char buff[128];
int len,n;
while(1){
n=recvfrom(s,buff,sizeof(buff),0,(struct sockaddr *)&remote,&len);
//printf("%s,%d/n",buff,n);
buff[n]='/0';
sendto(s,buff,strlen(buff), 0, (struct sockaddr *)&remote,sizeof(remote));
}
}
int main(int argc, char **argv) {
struct sockaddr_in remote;
char *hname, *sname;
int s, c, len;
if(argc < 2)
error(1,0,"parameters less than 2");
else if(argc == 2) {
hname = NULL;
sname = argv[1];
}
else if(argc == 3) {
hname = argv[1];
sname = argv[2];
}
s = server_wait(hname, sname,"udp");
process_server(s);
close(s);
exit(0);
}
- linux socket编程服务端模型(用getaddrinfo)
- linux socket编程客户端模型(用getaddrinfo)
- Linux 编程 之 【socket】 getaddrinfo
- 浅析linux服务端socket编程
- C-socket编程-客户端服务端通信模型
- linux c socket之GetAddrInfo
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- Linux socket客户端编程--验证libevent服务端
- socket编程总结(一)getaddrinfo()函数详解
- socket编程 -- epoll模型服务端/客户端通信的实现
- socket编程 -- epoll模型服务端/客户端通信的实现
- socket通信服务端编程
- Linux网络编程(一)socket模型创建
- linux下socket编程:I/O模型
- Linux网络编程socket模型介绍
- Linux下的socket编程实践(四)TCP服务端优化和常见函数
- Linux 下socket编程客户端与服务端代码
- ping简单实现
- VS2005常用插件搜罗(开发效率提高)
- VS2005/AJAX-VS2005中AJAX简单应用
- AJAX/VS2005-ajax+vs2005新特色
- linux socket编程客户端模型(用getaddrinfo)
- linux socket编程服务端模型(用getaddrinfo)
- 用迭代器构建的单链表
- linux硬盘安装
- Ajax实现智能表格(适合BS模式项目的录入页面)
- linux socket编程 udp connect例子
- HGE学习随笔之一
- libpcap函数库框架和使用
- 一道有趣的C#考试题目
- python与c的集成