-
unix网络编程 --ubuntu下建立编译环境
-
-
1.安装编译器,安装build-essential
-
sudo apt-get install build-essential
-
-
2.下载本书的头文件
-
下载unp13e:
-
-
3.进入unp13e 查看readme,照下列提示操作
-
1)chmod u+x configure
-
./configure
-
2)cd lib
-
make
-
3)cd ../libfree
-
make
-
4)cd ../libgai
-
make
-
-
4.将生成的libunp.a静态库复制到/usr/lib and /usr/lib64中
-
-
cd.. //回到unpv13e目录
-
-
sudo cp libunp.a /usr/lib
-
sudo cp libunp.a /usr/lib64
-
-
5.修改unp.h并将其和config.h拷贝到/usr/include 中,为了以后include方便
-
vim lib/unp.h //将unp.h 中#include “../config.h”修改为#include “config”
-
-
sudo cp lib/unp.h /usr/include
-
sudo cp config.h /usr/inlcude
-
-
6.编译源代码
-
cd ./intro
-
gcc daytimetcpcli.c -o daytimetcpcli -lunp
7.一个简单的获取时间程序:
-
客户端程序:
-
#include "unp.h" //包含自己编写的头文件
-
-
int main(int argc, char *argv[])
-
{
-
int sockfd, n;
-
char recvline[MAXLINE + 1];
-
struct sockaddr_in servaddr;
-
-
if(argc != 2)
-
err_quit("usage: a.out");
-
//创建TCP套接字,socket函数创建一个网际(AF_INET)字节流(SOCK_INET)套接字,该函数返回小整数描述符。
-
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) , 0)
-
err_sys("socket error");
-
//把网际套接字地址结构清零
-
bzero(&servaddr, sizeof(servaddr));
-
servaddr.sin_family = AF_INET;
-
//调用htons转换二进制端口号,由主机字节顺序为网络字节顺序
-
servaddr.sin_port = htons(13);
-
//把命令行参数转换为合适的格式
-
if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
-
err_quit("inet_pton error for %s, argv[1]");
-
//建立与服务器的连接
-
if(connect(sockfd, (SA*) &servaddr, sizeof(servaddr)) < 0)
-
err_sys("connect error");
-
//读入并输出与服务器的应答
-
while((n = read(sockfd, recvline, MAXLINE)) > 0)
-
{
-
recvline[n] = 0;
-
if(fputs(recvline, stdout) == EOF)
-
err_sys("fputs error");
-
}
-
if (n < 0)
-
{
-
err_sys("read error");
-
}
-
//终止程序
-
exit(0);
-
}
-
-
-
服务器端程序:
-
#include "unp.h"
-
#include <time.h>
-
-
int main(int argc, char *argv[])
-
{
-
int listenfd, connfd;
-
struct sockaddr_in servaddr;
-
char buff[MAXLINE];
-
time_t ticks;
-
//创建TCP套接字
-
listenfd = Socket(AF_INET, SOCK_STREAM, 0);
-
//把服务器的众所周知端口捆绑到套接字
-
bzero(&servaddr, sizeof(servaddr));
-
servaddr.sin_family = AF_INET;
-
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
-
servaddr.sin_port = htons(13);
-
Bind(listenfd, (SA*)&servaddr, sizeof(servaddr));
-
//把套接字转换成监听套接字,这样来自客户的外来连接就可以在该套接字上由内核接受
-
Listen(listenfd, LISTENQ);
-
//接受客户连接,发送应答
-
for ( ; ; )
-
{
-
//
-
connfd = Accept(listenfd, (SA*) NULL, NULL);
-
ticks = time(NULL);
-
snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
-
Write(connfd, buff, strlen(buff));
-
//终止连接
-
Close(connfd);
-
}
-
return 0;
-
}
-
-
-
测试结果:
-
服务器端:
-
root@wangxigang-ThinkPad-Edge:/home/wangxigang/unp# ./SimpleServer
-
客户端:
-
root@wangxigang-ThinkPad-Edge:/home/wangxigang/unp# ./SimpleClient 192.168.1.113
-
Mon Jul 14 13:32:04 2014
阅读(1022) | 评论(0) | 转发(0) |