Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14943
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-15 15:04
个人简介

计C学生党,HTML+CSS+DIV 出门,熟悉php,asp.net 熟悉Clanguage,Java , C# ,掌握初阶网络知识,目前主要学习:UNIX 网络编程、Linux/UNIX 系统编程、ACM

文章分类

全部博文(7)

文章存档

2016年(7)

我的朋友
最近访客

分类: LINUX

2016-06-04 09:44:00

daytimetcpsrv.c

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <time.h>

  9. int main(int argc,char **argv)
  10. {
  11.     int listenfd,connfd;//监听套接字,连接套接字
  12.     struct sockaddr_in servaddr;
  13.     char buff[1024];
  14.     time_t ticks;
  15.     
  16.     //创建监听套接字
  17.     listenfd=socket(AF_INET,SOCK_STREAM,0);
  18.     
  19.     // 填写网际套接字地址
  20.         //bzero相对于memset 更加好记,只有两个参数。 Berkeley函数和ANSI C标准函数
  21.     bzero(&servaddr,sizeof(servaddr));//清空结构推荐使用memset函数,bzero函数已过时,速度慢
  22.     servaddr.sin_family=AF_INET;//协议
  23.         //htonl htons 字节排序函数
  24.     servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//任意主机网络接口中连接服务器
  25.     servaddr.sin_port=htons(10000);//绑定端口
  26.     
  27.     //绑定套接字
  28.     bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));

  29.     //Listen 函数把该套接字转换成监听套接字
  30.     listen(listenfd,10);

  31.     //等待连接
  32.     printf("Waiting connection!\n");

  33.     for(;;)
  34.     {    
  35.         //阻塞,投入睡眠,等待某个客户连接的到达并被内核接受。TCP使用三次握手建立连接,握手完毕时accept返回,只时一个已连接描述符
  36.         connfd=accept(listenfd,(struct sockaddr *)NULL,NULL);
  37.         ticks=time(NULL);
  38.         snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));//ctime把整数值转换成直观可读的时间格式
  39.         //写到buff缓冲区,并不等于已经发送给对方,等缓冲区处理完之前的数据后,开始传送缓冲区内容
  40.         write(connfd,buff,strlen(buff));
  41.         close(connfd);
  42.     }
  43. }
  44. //补充知识:
  45. //------------------------
  46. //字节操纵函数  <strings.h>
  47. //Berkeley函数
  48. //bzero bcopy bcmp ---以上仅仅列出函数名
  49. //ANSI C 函数
  50. //*memset *memcpy memcmp
  51. //------------------------
daytimetcpcli.c

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. int main(int argc,char **argv)
  9. {
  10.     int sockfd,n;
  11.     char recvline[1024];
  12.     struct sockaddr_in servaddr;

  13.     if(argc!=2)
  14.         {printf("参数有误!\n");return -1;}

  15.     if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
  16.         {printf("套接字创建失败!\n");return -1;}

  17.     //指定服务器的IP地址和端口
  18.     bzero(&servaddr,sizeof(servaddr));
  19.     servaddr.sin_family=AF_INET;//协议
  20.     servaddr.sin_port =htons(10000);//端口
  21.         //inet_pton地址转换(ASCII 字符串 与 网络字节序的二进制之间转换网际地址) P表达->N数值
  22.     if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)//IP地址有参数获得argv[1],argv[0]->当前程序
  23.         {printf("inet_pton error for ");return -1;}
  24.     
  25.     //进行连接到服务器
  26.     if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
  27.         {printf("connect error");return -1;}

  28.     //读数据
  29.     while( (n=read(sockfd,recvline,1024))>0){
  30.         recvline[n]=0;
  31.         if(fputs(recvline,stdout)==EOF)//将recvline中的数据输出到标准输出
  32.             {printf("fputs error");return -1;}
  33.     }

  34.     if(n<0)printf("read error");

  35.     exit(0);        
  36. }

输出结果:
服务器端:
xx@xxxxxx:~/Public/C$ ./daytimetcpsrv.out
Waiting connection!

客户机端:
xx@xxxxxx:~/Public/C$ ./daytimetcpcli.out 127.0.0.1
Sat Jun  4 09:28:33 2016





阅读(696) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~