博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux之网络编程:时间服务器
阅读量:4353 次
发布时间:2019-06-07

本文共 4051 字,大约阅读时间需要 13 分钟。

基于TCP-服务器

1,创建一个socket套接字

int socket(int domain,int type,int protocol)

domain:IP地址族,AF_INET(IPv4)、AF_INET6(IPv6)、AF_LOCAL/AF_UNIX(本地)

type:套接字,流式套接字(SOCK_STRAM),数字报套接字(SOCK_DGRAM),原始套接字(SOCK_RAM)

protocol:置0

2,邦定socket套接字和服务器相关资料

int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen)

sockfd:套接字描述符

addr:指向服务器sockaddr的指针

addrlen:参数addr的长度

成功为0,失败非0

3,设置允许客户端的最大连接数

int listen(int sockfd,int backlog)

backlog:连接数量

4、用来等待客户端的连接请求

int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen)

addr:指向客户端的sockaddr的指针

addrlen:参数addr的长度

例如:

服务器端time_server.c

1 /************************************************************************* 2     > File Name: sock_server.c 3     > Author: xu 4     > Mail: eeexu123@163.com  5     > Created Time: 2016年10月13日 星期四 16时13分24秒 6  ************************************************************************/ 7  8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #define MAX_LISTEN_QUE 518 #define BUFFER_SIZE 12819 20 int main(int argc,char *argv[])21 {22 int sockfd,listenfd;23 int bytes,opt=1;24 time_t timp;25 char buf[BUFFER_SIZE];26 struct sockaddr_in server,client;27 /*客户端程序开始建立sockfd描述符*/28 listenfd = socket(AF_INET,SOCK_STREAM,0);29 if(listenfd < 0)30 {31 perror("socket");32 exit(1);33 }34 /*使用套接字选项,避免出错*/35 if(setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)) != 0)36 {37 perror("setsockopt");38 exit(1);39 }40 /*服务器填充sockaddr结构*/41 bzero(&server,sizeof(server)); //对结构体清零42 server.sin_family = AF_INET; //IPv4地址族43 server.sin_addr.s_addr = ntohl(INADDR_ANY); //服务器IP址址44 server.sin_port = ntohs(8888); //端口号45 46 /*邦定sockfd描述符到IP地址*/47 int len = sizeof(struct sockaddr);48 if(bind(listenfd,(struct sockaddr *)&server,len) != 0)49 {50 perror("bind");51 exit(1);52 }53 54 /*设置允许连接的最大客户数*/55 if(listen(listenfd,MAX_LISTEN_QUE) != 0)56 {57 perror("listen");58 exit(1);59 }60 while(1)61 {62 /*服务器阻塞,直到客户程序建立连接*/63 sockfd = accept(listenfd,(struct sockaddr *)&client,&len);64 if(sockfd < 0)65 {66 perror("accept");67 exit(1);68 }69 //提取时间70 timp = time(NULL);71 snprintf(buf,BUFFER_SIZE,"%s",ctime(&timp));72 //向客户端发送时间73 bytes = write(sockfd,buf,strlen(buf));74 if(bytes < 0)75 {76 perror("write");77 exit(1);78 }79 80 printf("buf is %s and buf size %d\n",buf,bytes);81 printf("IP:0X%x,PORT:%d\n",htonl(client.sin_addr.s_addr),htons(client.sin_port));82 //结束本次连接83 close(sockfd);84 }85 close(listenfd);86 return 0;87 }

 

客户端time_client.c

1 /************************************************************************* 2     > File Name: sock_client.c 3     > Author: xu 4     > Mail: eeexu123@163.com  5     > Created Time: 2016年10月13日 星期四 16时13分37秒 6  ************************************************************************/ 7  8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #define MAX_LISTEN_QUE 519 #define BUFFER_SIZE 12820 21 int main(int argc,char *argv[])22 {23 int sockfd,bytes;24 int buf[BUFFER_SIZE];25 struct sockaddr_in server;26 27 28 /*客户端程序开始建立sockfd描述符*/29 sockfd = socket(AF_INET,SOCK_STREAM,0);30 if(sockfd < 0)31 {32 perror("socket");33 exit(1);34 }35 /*客户端程序填充服务端资料*/36 bzero(&server,sizeof(server)); //初始化,置037 server.sin_family = AF_INET; //IPv438 server.sin_addr.s_addr = inet_addr("127.0.0.1"); //IP址址39 server.sin_port = htons(8888); 40 /*客户端程序发起连接请求*/41 if(connect(sockfd,(struct sockaddr *)&server,sizeof(server)) < 0)42 {43 perror("connetc");44 exit(1);45 }46 /*读取服务端时间*/47 bytes = read(sockfd,buf,BUFFER_SIZE);48 if(bytes < 0)49 {50 perror("read");51 exit(1);52 }53 if(0 == bytes)54 {55 printf("server close\n");56 exit(1);57 }58 printf("read bytes is :%d\n",bytes);59 printf("Time is :%s\n",buf);60 61 close(sockfd);62 return 0;63 }

 

转载于:https://www.cnblogs.com/eeexu123/p/5961030.html

你可能感兴趣的文章
Vim 命令、操作、快捷键全集
查看>>
有没有不加班的程序员?
查看>>
《从零开始学Swift》学习笔记(Day 8)——小小常量、变量大作用
查看>>
SQL-group by
查看>>
hdu 2211
查看>>
前端前景如何?
查看>>
二项系数
查看>>
sql server使用中遇到的问题记录
查看>>
jQuery的hover方法搭配css的hover选择器,实现选中元素突出显示
查看>>
基于局域网的超简易即时通讯软件(二)
查看>>
Android开发之漫漫长途 番外篇——内存泄漏分析与解决
查看>>
学习笔记:Python3 函数
查看>>
团队开发进度报告2
查看>>
bzoj1018
查看>>
codevs 2803 爱丽丝·玛格特罗依德
查看>>
java8的十大新特性
查看>>
Ms sql server 数据类型说明
查看>>
shadow密码文件
查看>>
归并排序及优化(Java实现)
查看>>
kubernates使用kubeadm安装
查看>>