Chinaunix首页 | 论坛 | 博客
  • 博客访问: 511899
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 716
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-03 21:48
文章分类

全部博文(138)

文章存档

2019年(1)

2017年(5)

2016年(99)

2015年(33)

我的朋友

分类: C/C++

2015-08-25 00:20:57

原文地址:unix网络编程一卷 unp.h 作者:wangspace


  1. unix网络编程 --ubuntu下建立编译环境

  2. 1.安装编译器,安装build-essential
  3. sudo apt-get install build-essential

  4. 2.下载本书的头文件
  5. 下载unp13e: 

  6. 3.进入unp13e 查看readme,照下列提示操作
  7.  1)chmod u+x configure
  8.       ./configure
  9.  2)cd lib
  10.         make
  11.  3)cd ../libfree
  12.       make
  13.  4)cd ../libgai
  14.       make

  15. 4.将生成的libunp.a静态库复制到/usr/lib and /usr/lib64中

  16.  cd.. //回到unpv13e目录
  17.  
  18.  sudo cp libunp.a /usr/lib
  19.  sudo cp libunp.a /usr/lib64

  20. 5.修改unp.h并将其和config.h拷贝到/usr/include 中,为了以后include方便
  21.  vim lib/unp.h //将unp.h 中#include../config.h”修改为#include “config”
  22.  
  23.  sudo cp lib/unp.h /usr/include
  24.  sudo cp config.h /usr/inlcude

  25. 6.编译源代码
  26.  cd ./intro
  27.  gcc daytimetcpcli.c -o daytimetcpcli -lunp

 7.一个简单的获取时间程序:
  1. 客户端程序:
  2. #include "unp.h" //包含自己编写的头文件

  3. int main(int argc, char *argv[])
  4. {
  5.   int sockfd, n;
  6.   char recvline[MAXLINE + 1];
  7.   struct sockaddr_in servaddr;

  8.   if(argc != 2)
  9.     err_quit("usage: a.out");
  10.   //创建TCP套接字,socket函数创建一个网际(AF_INET)字节流(SOCK_INET)套接字,该函数返回小整数描述符。
  11.   if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) , 0)
  12.     err_sys("socket error");
  13.   //把网际套接字地址结构清零
  14.   bzero(&servaddr, sizeof(servaddr));
  15.   servaddr.sin_family = AF_INET;
  16.   //调用htons转换二进制端口号,由主机字节顺序为网络字节顺序
  17.   servaddr.sin_port = htons(13);
  18.   //把命令行参数转换为合适的格式
  19.   if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
  20.     err_quit("inet_pton error for %s, argv[1]");
  21.   //建立与服务器的连接
  22.   if(connect(sockfd, (SA*) &servaddr, sizeof(servaddr)) < 0)
  23.     err_sys("connect error");
  24.   //读入并输出与服务器的应答
  25.   while((n = read(sockfd, recvline, MAXLINE)) > 0)
  26.     {
  27.       recvline[n] = 0;
  28.       if(fputs(recvline, stdout) == EOF)
  29.     err_sys("fputs error");
  30.      }
  31.   if (n < 0)
  32.     {
  33.       err_sys("read error");
  34.     }
  35.   //终止程序
  36.   exit(0);
  37. }


  38. 服务器端程序:
  39. #include "unp.h"
  40. #include <time.h>

  41. int main(int argc, char *argv[])
  42. {
  43.   int listenfd, connfd;
  44.   struct sockaddr_in servaddr;
  45.   char buff[MAXLINE];
  46.   time_t ticks;
  47.   //创建TCP套接字
  48.   listenfd = Socket(AF_INET, SOCK_STREAM, 0);
  49.   //把服务器的众所周知端口捆绑到套接字
  50.   bzero(&servaddr, sizeof(servaddr));
  51.   servaddr.sin_family = AF_INET;
  52.   servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  53.   servaddr.sin_port = htons(13);
  54.   Bind(listenfd, (SA*)&servaddr, sizeof(servaddr));
  55.   //把套接字转换成监听套接字,这样来自客户的外来连接就可以在该套接字上由内核接受
  56.   Listen(listenfd, LISTENQ);
  57.   //接受客户连接,发送应答
  58.   for ( ; ; )
  59.     {
  60.       //
  61.       connfd = Accept(listenfd, (SA*) NULL, NULL);
  62.       ticks = time(NULL);
  63.       snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
  64.       Write(connfd, buff, strlen(buff));
  65.       //终止连接
  66.       Close(connfd);
  67.     }
  68.   return 0;
  69. }


  70. 测试结果:
  71. 服务器端:
  72. root@wangxigang-ThinkPad-Edge:/home/wangxigang/unp# ./SimpleServer
  73. 客户端:
  74. root@wangxigang-ThinkPad-Edge:/home/wangxigang/unp# ./SimpleClient 192.168.1.113
  75. Mon Jul 14 13:32:04 2014



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