基于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. 解决 js setTimeout 传递带参数的函数无效果

    最近 js  用到 setTimeout 递归调用 刷新进度  setTimeout ("getProgress(name,type)", 3000) ; 发现getProgres ...

  2. 队列queue实现线程的消费者和生产者

    import threading import queue import random import time qq = queue.Queue(4) #实例化一个队列,因为是一个进程的线程,所以共资 ...

  3. python 列表list操作

    1. 切片:(左闭右开) 用-1倒置 2. 拆包 3. list的append 与 insert 4. 两个列表合并,直接 + : 5. 加入列表 extend: 6. pop()删除(通过序号,或最 ...

  4. scala-Unit-3-Scala基础语法2

    一.定义方法.函数.及方法转换为函数 1.方法的定义: def  方法名(参数1:数据类型,参数2:数据类型...):返回值类型 ={ } 2.定义函数: val h1 = (a:Int,b:Int) ...

  5. Philosopher’s Walk(递归)

    In Programming Land, there are several pathways called Philosopher’s Walks for philosophers to have ...

  6. eclipse tomcat报Several ports(8005 8080 8009)端口被占用问题解决方案

    在启动tomcat的时候eclipse突然报错 Several ports (8005,8080,8009) required by Tomcat v6.0 Server at localhost a ...

  7. C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥

    C - Visible Trees HDU - 2841 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质.能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质 也就是在 1 - ...

  8. Java数组常用方法

    数组基础:http://www.cnblogs.com/mengdd/archive/2013/01/04/2844264.html import java.util.Arrays; 1):创建数组 ...

  9. 安卓面试题 Android interview questions

    安卓面试题 Android interview questions 作者:韩梦飞沙 ‎2017‎年‎7‎月‎3‎日,‏‎14:52:44 1.      要做一个尽可能流畅的ListView,你平时在 ...

  10. SQL的多种JOIN