Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2112738
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: LINUX

2015-06-10 15:41:54

第1章1.5节一个简单的时间获取服务器程序
下面的demo既有server端又有client端,两者互相通信
1. server端
  1. cong@msi:/work/test/tcpip$ cat 2timeserv/timeserv.c
  2. #include "utils.h"

  3. #define TIME_SERV_ADDR "192.168.4.98"
  4. //#define TIME_SERV_ADDR "127.0.0.1"

  5. #define LISTENQ 10

  6. int main ( int argc, char *argv[] )
  7. {
  8.     int listenfd, connfd;
  9.     struct sockaddr_in servaddr;
  10.     char buff[1024];
  11.     time_t ticks;
  12.     listenfd = socket(AF_INET, SOCK_STREAM, 0);
  13.     if(listenfd< 0)
  14.         return -1;
  15.     dbmsg("socket created");
  16.     bzero(&servaddr, sizeof(servaddr));
  17.     servaddr.sin_family = AF_INET;
  18.     servaddr.sin_port = htons(13999);               //绑定端口13999,htons将主机字节转为网络字节序
  19.     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);   //区别:client端必须是一个固定的ip,server端是INADDR_ANY
  20.     //inet_pton(AF_INET, TIME_SERV_ADDR, &servaddr.sin_addr);
  21.     
  22.     dbmsg("next bind&listen");
  23.     bind(listenfd, (const struct sockaddr*)&servaddr, sizeof(servaddr));
  24.     listen(listenfd, LISTENQ);
  25.     dbmsg("bind&listen success");
  26.     while(1)
  27.     {
  28.         //int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
  29.         connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
  30.         dbmsg("accept success");
  31.         ticks = time(NULL);
  32.         snprintf(buff, sizeof(buff), "%.24s\n", ctime(&ticks));
  33.         write(connfd, buff, strlen(buff));
  34.         close(connfd);
  35.     }

  36.     return EXIT_SUCCESS;
  37. }
2. client端
  1. #include "utils.h"

  2. //#define TIME_SERV_ADDR "192.168.4.98"
  3. #define TIME_SERV_ADDR "127.0.0.1"

  4. int main ( int argc, char *argv[] )
  5. {
  6.     dbmsg();
  7.     int sockfd, n;
  8.     struct sockaddr_in servaddr;
  9.     char recvline[1024];
  10.     sockfd = socket(AF_INET, SOCK_STREAM, 0);
  11.     if(sockfd < 0)
  12.         return -1;
  13.     dbmsg("socket created");
  14.     bzero(&servaddr, sizeof(servaddr));
  15.     servaddr.sin_family = AF_INET;
  16.     //这儿修改端口为13999,不修改在主机上运行就会访问系统的daytime而不访问自己写的server了
  17.     servaddr.sin_port = htons(13999);      //绑定端口13999,htons将主机字节转为网络字节序
  18.     inet_pton(AF_INET, TIME_SERV_ADDR, &servaddr.sin_addr);  //将字符串(presentation)转为数值(numeric)
  19.     dbmsg("next connect");
  20.     connect(sockfd, (const struct sockaddr*)&servaddr, sizeof(servaddr));
  21.     dbmsg("connect success");
  22.     while((n=read(sockfd, recvline, MAXLINE)) > 0)
  23.     {
  24.         recvline[n] = '\0';
  25.         dbmsg("read over");
  26.         fputs(recvline, stdout);
  27.     }

  28.     return EXIT_SUCCESS;
  29. }
3.查看本要端口占用情况
a.netstat默认,是不显示listen状态的socket
  1. cong@msi:/work/test/tcpip$ netstat
  2. tcp 0 1 192.168.4.98:37985 58.215.118.34:http FIN_WAIT1
  3. unix 3 [ ] STREAM CONNECTED 19484
b. -l 显示处于listen状态的socket
    -a 显示所有状态的socket,包括listen connect等
c. -n 将host与port name显示为数字
  1. cong@msi:/work/test/tcpip$ netstat -lp
  2. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  3. tcp 0 0 *:daytime *:* LISTEN -

  4. cong@msi:/work/test/tcpip$ netstat -lnp
  5. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  6. tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN -    //将daytime服务变为数字13
d. -p显示使用socket的程序
  1. cong@msi:/work/test/tcpip$ netstat -lp
  2. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  3. tcp 0 0 *:daytime *:* LISTEN -

  4. cong@msi:/work/test/tcpip$ netstat -lnp
  5. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  6. tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN -
附源码:
client端,下载后改名为1echo.tar.gz
1echo.rar
server端,下载后改名为2timeserv.tar.gz
2timeserv.rar
阅读(1008) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~