摘要:
//Filename:TcpServerClass.hpp#ifndefTCPSERVERCLASS_HPP_INCLUDED#defineTCPSERVERCLASS_HPP_INCLUDED#include<unistd.h>#include<iostream>#include<sys/socket.h>#include<arpa/inet.h>classTcpServer{private:intlistenSock;intcommunicationSock;sockaddr_inservAddr;sockaddr_inclntAddr;pu 阅读全文
摘要:
现在,我们通过accept()创建了新的socket,也就是我们类中的数据成员communicationSock,现在,我们就可以通过这个socket进行通讯了。TCP通讯模型 在介绍函数之前,我们应该了解一些事实。TCP的Server/Client模型类似这样:ServApp——ServSock——Internet——ClntSock——ClntApp当然,我们这里的socket指的就是用于“通讯”的socket。TCP的server端至少有两个socket,一个用于监听,一个用于通讯;TCP的client端可以只有一个socket,这个socket同时“插”在server的两个socket 阅读全文
摘要:
作者:龙飞 这里的“通讯”加上了引号,是因为实际上所有的socket都有通讯的功能,只是在我们的例子中,之前那个socket只负责listen,而这个socket负责接受信息并echo回去。我们现看看这个函数:boolTcpServer::isAccept(){unsignedintclntAddrLen=sizeof(clntAddr);if((communicationSock=accept(listenSock,(sockaddr*)&clntAddr,&clntAddrLen))<0){returnfalse;}else{std::cout<<&quo 阅读全文
摘要:
作者:龙飞 前面一小节,我们已经写出了TcpServer的构造函数。这个函数的实际作用,就是创建了listen socket(监听嵌套字)。这一节,我们来具体分析这个创建的过程。socket和sockaddr的创建是可以相互独立的 在函数中,我们首先通过socket()系统调用创建了listenSock,然后通过为结构体赋值的方法具体定义了服务器端的sockaddr。(memset()函数的作用是把某个内存段的空间设定为某值,这里是清零。)其他的概念已经在前一小节讲完了。这里需要补充的是说明宏定义INADDR_ANY。这里的意思是使用本机所有可用的IP地址。当然,如果你机器绑定了多个IP地址, 阅读全文
摘要:
作者:龙飞 话题回到“黑社会办公室”的例子,讲概念已经扯得比较远了,不过,这一节我们还得讲概念,不过好在有些程序的例子。如果大家不想翻回去看TcpServer类的原型,我这里直接给出这个头文件的完整源代码://Filename:TcpServerClass.hpp#ifndefTCPSERVERCLASS_HPP_INCLUDED#defineTCPSERVERCLASS_HPP_INCLUDED#include<unistd.h>#include<iostream>#include<sys/socket.h>#include<arpa/inet.h& 阅读全文
摘要:
UNIX中的一切事物都是文件(everythingin Unix is a file!) 当我在这篇教程中提到UNIX的时候,其意思专指符合UNIX标准的所谓“正统”UNIX的衍生系统(其实我就用来带指那些买了最初UNIX源代码的商业系统)操作系统和类似Linux,BSD这些类UNIX系统。如果某些要点是Linux特有的,或者因为本人孤陋寡闻暂时搞不清楚是Linux特有的还是UNIX通用的,我就会指明是Linux,甚至其发行版(我本人在写这篇教程的时候是以Debian GNU/Linux 4.0 etch为测试平台的)。 我们学习UNIX的时候,恐怕听到的第一句话就是这句:UNIX中一切都是文 阅读全文
摘要:
绝大部分关于socket编程的教程总是从socket的概念开始讲起的。 要知道,socket的初衷是个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中的一小部分: 运输层(Host-to-Host Transport Layer)的TCP和UDP协议, 以及使用这两个协议进行应用层(Application Layer)的开发。 即使是socket的核心部分,网络层(Internet Layer)的IP协议,在编程的时候我们也很少会感觉到它的存在——因为已经被封装好了,我们唯一需要做的事情就是传入一个宏。第一节我想介绍的概念就这么多, 当然... 阅读全文
摘要:
转自:http://www.cppblog.com/lf426/archive/2008/07/10/55800.html收件人地址 一家化妆品公司将一批新产品的样品,准备发给某学校某个班的女生们免费试用。通常情况下,这件邮包的地址上可以这么写:收件人:全体女生。地址:A省B市C学校,X级Y班。但是,如果在描述地址的时候这样写呢:收件人:全体女生。地址:请打电话xxxxxxxx,找他们学校一个叫Lucy的女生,然后把东西送到她的班上。这种文字是相当的诡异啊-_-!!!,但是并不等于就没有表述清楚邮包的去向和地址。事实上邮局看到这样的地址一定会发飙的,然而对于电脑,如果你的地址描述形式是他可以接 阅读全文