- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络编程复习
Socket (套接字, 英文原意 电源插座)
socket的初衷是一个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中的一小部分:运输层(Host-to-Host Transport Layer)的TCP和UDP协议,以及使用这两个协议进行应用层(Application Layer)的开发。
即使是socket的核心部分,网络层(Internet Layer)的IP协议,在编程的时候我们也很少会感觉到它的存在——因为已经被封装好了,我们唯一需要做的事情就是传入一个宏。
数据传输的顺序是:
链路层--网络层--运输层--应用层
建模代码:
class TcpServer
{
private :
int listenSock;
int communicationSock;
sockaddr_in servAddr;
sockaddr_in clntAddr;
public :
TcpServer( int listen_port);
bool isAccept();
void handleEcho();
};
sock实际上就是socket,addr就是address。serv和clnt是server和client。还有一个 socket中的结构体sockaddr_in, 表示:socket address internet(网络嵌套字地址)。
2.socket与文件描述符
#includeunistd.h
常用的3个已经打开的fd,0:标准输入(stdin);1:标准输出(stdout);2:标准错误(stderr)。
注意:file和fd并非一定是一一对应的。当一个file被多个程序调用的时候,会生成相互独立的fd。
文件是应用程序与系统(包括特定硬件设备)之间的桥梁,而文件描述符就是应用程序使用这个“桥梁”的接口。在需要的时候,应用程序会向系统申请一个文件,然后将文件的描述符返回供程序使用。返回socket的文件通常被创建在/tmp或者/usr/tmp中。
3.sockaddr和sockaddr_in
socket的通用address描述结构sockaddr:
struct sockaddr
{
unsigned short sa_family;
char sa_data[ 14 ];
};
这是一个16字节大小的结构(2+14)(不考虑内存对齐?),sa_family可以认为是socket address family的缩写,也可能被简写成AF(Address Family),当我们指定sa_family=AF_INET (表示该地址属于Internet地址)。 之后,sa_data的形式也就被固定了下来:最前端的2字节用于记录16位的端口,紧接着的4字节用于记录32位的IP地址,最后的8字节清空为零。
我们实际在构造sockaddr时候用到的结构sockaddr_in(意指socket address internet):
struct sockaddr_in
{
unsigned short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[ 8 ];
};
sin_addr被定义成了一个结构,这个结构实际上就是:
struct in_addr
{
unsigned long s_addr;
};
头文件依赖关系:
#include winsock2.h
int listenSock;
int communicationSock;
sockaddr_in servAddr;
sockaddr_in clntAddr;
现在来写这个类的构造函数:
TcpServer::TcpServer( int listen_port)
{
if ( (listenSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) 0 ) {
throw socket() failed ;
}
memset( servAddr, 0 , sizeof (servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
ser
您可能关注的文档
最近下载
- 蛛网膜下腔出血(共46张PPT).pptx VIP
- 002医疗器械质量安全关键岗位人员岗位说明.docx VIP
- 2025年四川省拟任县处级领导干部模拟试题第1套题及答案.docx VIP
- 执业药师《急性心力衰竭(AHF)的规范治疗》继续教育习题答案.docx VIP
- 云服务器项目计划书.docx VIP
- 2025年四川省拟任县处级领导干部任职资格试题及参考答案.docx VIP
- 水利工程建设项目档案管理监理实施细则.docx VIP
- 台励福FD(G)15-35-Artison系列叉车零件图册.pdf VIP
- 《社区矫正法》知识考试题库资料100题(含答案).pdf VIP
- 基于纳米酶的肿瘤靶向给药系统在肿瘤治疗中的应用探讨教学研究课题报告.docx
原创力文档


文档评论(0)