关于网络编程服务器文件发送的报告,unix网络编程读书报告2——最简单的tcp时间服务器...

TCP服务器端得helloworld

1.程序

从《unix网络编程》抄来了,改了一点,原书使用自己封装的函数,这里都使用原始的。使用c++的stringstream和string做buffer进行write,尝试了一下。

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char ** argv)

{

int

listenfd = socket(AF_INET, SOCK_STREAM, 0);//创建socket fd

if(listenfd

< 0){

std::cout<

exit(1);

}

sockaddr_in

servaddr;

bzero(&servaddr,

sizeof(servaddr));

servaddr.sin_family

= AF_INET;

servaddr.sin_addr.s_addr

= htonl(INADDR_ANY);//地址为INADDR_ANY表示监听本机所有网络接口

servaddr.sin_port

= htons(1500);//监听端口,客户端程序必须连接这个端口才能与服务器交互

//bind函数将socket fd 与相应的地址和端口号绑定。

if(bind(listenfd,

(sockaddr*)(&servaddr), sizeof(servaddr)) < 0){

std::cout<

exit(1);

}

//listen方法将socket fd转换为listen fd,第二个参数表示等待队列长度

if(listen(listenfd,

5) < 0){

std::cout<

exit(1);

}

//服务器一般都是一个死循环

for(;;){

//监听,等待客户端的链接,accept函数是一个阻塞函数,如果客户端不连接服务器,程序将在这里停下。

//函数返回一个连接fd,服务器使用该fd与连接进来的客户端交互,跟普通的文件fd类似。

int connfd

= accept(listenfd, 0, 0);

if(connfd

< 0){

std::cout<

continue;

}

std::cout<

time_t

ticks = std::time(0);

std::stringstream

strout;

strout/write方法向客户端发送包

//这里没有使用char 数组做buff传送,而是使用了string,暂时没有研究过效率如何。

//测试过,客户端没有read函数时这个write也可以成功返回

int n =

write(connfd, strout.str().c_str(),strout.str().size());

if(n

< 0){

std::cout<

}

else{

std::cout<

}

//发送完毕主动关闭连接,客户端受到关闭链接消息后会退出循环(见客户端程序)

close(connfd);

}

}

2.下一步工作

下一步打算改造一下服务器,做一个log监控服务器,客户端向服务器发送查询log命令,服务器返回对应的log文件。

客户端暂时不管了,用telnet来调试。

阅读(651) | 评论(0) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值