基于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<stdio.h>
9 #include<sys/types.h>
10 #include<sys/socket.h>
11 #include<string.h>
12 #include <netinet/in.h>
13 #include <arpa/inet.h>
14 #include<unistd.h>
15 #include<time.h>
16 #include<stdlib.h>
17 #define MAX_LISTEN_QUE 5
18 #define BUFFER_SIZE 128
19
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<stdio.h>
9 #include<sys/types.h>
10 #include<sys/socket.h>
11 #include<string.h>
12 #include <netinet/in.h>
13 #include <arpa/inet.h>
14 #include<unistd.h>
15 #include<netdb.h>
16 #include<time.h>
17 #include<stdlib.h>
18 #define MAX_LISTEN_QUE 5
19 #define BUFFER_SIZE 128
20
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)); //初始化,置0
37 server.sin_family = AF_INET; //IPv4
38 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 }
如果有错误,欢迎各位网友指导。 另外喜欢的话,给个推荐呗,谢谢!

Linux之网络编程:时间服务器的更多相关文章

  1. 嵌入式linux的网络编程(1)--TCP/IP协议概述

    嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...

  2. Linux C++ 网络编程学习系列(1)——端口复用实现

    Linux C++ 网络编程学习系列(1)--端口复用实现 源码地址:https://github.com/whuwzp/linuxc/tree/master/portreuse 源码说明: serv ...

  3. Linux C网络编程学习笔记

    Linux C网络编程总结报告 一.Linux C 网络编程知识介绍: 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端:(client) 在网络程序中, ...

  4. UNIX网络编程——客户/服务器程序设计示范(总结)

    (1)当系统负载较轻是,每来一个客户请求现场派生一个子进程为之服务的传统并发服务器程序模型就足够了.这个模型甚至可以与inetd结合使用,也就是inetd处理每个连接的接收.我们的其他意见是就重负荷运 ...

  5. 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)

    RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...

  6. 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)

    RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三  多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...

  7. Linux网络编程客户\服务器设计范式

    1.前言 网络编程分为客户端和服务端,服务器通常分为迭代服务器和并发服务器.并发服务器可以根据多进程或多线程进行细分,给每个连接创建一个独立的进程或线程,或者预先分配好多个进程或线程等待连接的请求.今 ...

  8. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  9. LINUX socket网络编程

    1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统.由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 U ...

  10. 【Linux/unix网络编程】之使用socket进行TCP编程

    实验一 TCP数据发送与接收 [实验目的] 1.熟练掌握套接字函数的使用方法. 2.应用套接字函数完成基本TCP通讯,实现服务器与客户端的信息交互. [实验学时] 4学时 [实验内容] 实现一个服务器 ...

随机推荐

  1. Flink的广播变量

    Flink支持广播变量,就是将数据广播到具体的taskmanager上,数据存储在内存中,这样可以减缓大量的shuffle操作: 比如在数据join阶段,不可避免的就是大量的shuffle操作,我们可 ...

  2. zabbix邮箱报警设置&问题汇总

    zabbix邮件报警部署! Zabbix监控服务端.客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常,通过查看Zabbix监控服务器,可以了解服务器的运行状态是否正常,运维人员不会时 ...

  3. lvs介绍

    1Linux集群及系统扩展的方式概述 集群是有多台服务器组织在一起,一起工作,因为单台服务器的并发响应能力是有限的,响应处理能力也是有限的所有有了集群的出现 在系统扩展有2种方法: 1 向上扩展:是指 ...

  4. 【目录】《剑指Offer》Java实现

    如题: 1) 找出数组中重复的数字 2) 不修改数组找出重复的数字 3) 二维数组中的查找 4) 替换空格 5) 从尾到头打印链表 6) 重建二叉树 7) 二叉树的下一个结点 8) 用两个栈实现队列 ...

  5. Codeforces 853B Jury Meeting (差分+前缀和)

    <题目链接> 题目大意: 有$ n(n<=1e5)$个城市和一个首都(0号城市),现在每个城市有一个人,总共有$ m (m<=1e5)$次航班,每个航班要么从首都起飞,要么飞到 ...

  6. POJ 1258 Agri-Net 【Prime】模板题

    题目链接>>> 题目大意:     给你N*N矩阵,表示N个村庄之间的距离.FJ要把N个村庄全都连接起来,求连接的最短距离(即求最小生成树).解析如下: #include <c ...

  7. [ 高危 ]mt某站SQL注入

    RANK 24 金币    24 等价RMB  240 与上一漏洞同源所以只有24 数据包: GET /check?clientId=64915 HTTP/1.1 Host: xxx.meituan. ...

  8. 从小白到区块链工程师:第一阶段:Go语言的控制台输入和输出(3)

    六,Print系列的函数输出 1:Println 打印换行.Print控制台打印,lnline 一行,打印数据后自动换一行显示.下面显示在控制台打印出不同的类型. 打印输出结果后,会自动换一行.打印结 ...

  9. 使用Admin监控

    在springboot中,也提供了很全面的监控系统.这篇文章介绍一下springboot-admin监控springboot项目. 原来大致是这样的,springboot--admin--server ...

  10. puppeteer 安装失败的解决方案

    你应该也是在玩puppeteer,所以才会来到这里寻找答案,开始正文…… 安装时遇到 ERROR: Failed to download Chromium r515411! Set "PUP ...