accept(SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen)中的参数说明: s:是帧听Socket也就是执行listen的socket addr是连接上来的客户端的地址信息,包括IP和端口 addrlen是长度 函数本身返回一个与客户端连接的Server socket.
struct sockaddr FAR *addr 1、是一个输出的参数,也就是说执行了accept以后addr中就有了相关信息(2楼说的很清楚)。这个要在你使用之前定义。 2、这里的FAR 表示远指针(近指针、远指针、巨指针是段寻址的16bit处理器的产物)在32位系统下一般不作区分。近指针16位,远指针32位。
NOD! 第二个参数是值-结果参数,即由内核填充的关于客户端的地址和端口信息的参数
用代码说明比较方便 SOCKET s = socket(AF_INET, SOCK_STREAM, 0); listen(s, 5); SOCK_ADDRIN addrClient; int nLen = sizeof(SOCK_ADDRIN); accept(s, (SOCKADDR*)&addrClient, &nLen);其中,addrClient保存了本次连接到程序的ip和port,nLen保存了本次连接到程序的地址结构的大小
是接收到的socket的远端地址,是输出参数,不可能是const的
关于FAR,你可以右键点击,选择Go To Definition of FAR,我们可以看到#define FAR far 再右键点击far,选择Go To Definition of far,我们可以看到 #undef far #undef near #undef pascal#define far #define near #define far后面是空白的,也就是说,系统编译的时候,把FAR替换成空白,也就是跟没写一样,呵呵关于far,涉及到汇编语言的一些知识。早期的dos编程模式中使用的内存分段模式,函数名字代表的是函数的入口地址,所以这个地址寻址在编译的时间可以决定是代码段内near跳转还是段间far跳转,现在windows程序都使用平坦内存模式,就不存在近跳转和远跳转了.
s:是帧听Socket也就是执行listen的socket
addr是连接上来的客户端的地址信息,包括IP和端口
addrlen是长度
函数本身返回一个与客户端连接的Server socket.
1、是一个输出的参数,也就是说执行了accept以后addr中就有了相关信息(2楼说的很清楚)。这个要在你使用之前定义。
2、这里的FAR 表示远指针(近指针、远指针、巨指针是段寻址的16bit处理器的产物)在32位系统下一般不作区分。近指针16位,远指针32位。
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
listen(s, 5);
SOCK_ADDRIN addrClient;
int nLen = sizeof(SOCK_ADDRIN);
accept(s, (SOCKADDR*)&addrClient, &nLen);其中,addrClient保存了本次连接到程序的ip和port,nLen保存了本次连接到程序的地址结构的大小
再右键点击far,选择Go To Definition of far,我们可以看到
#undef far
#undef near
#undef pascal#define far
#define near
#define far后面是空白的,也就是说,系统编译的时候,把FAR替换成空白,也就是跟没写一样,呵呵关于far,涉及到汇编语言的一些知识。早期的dos编程模式中使用的内存分段模式,函数名字代表的是函数的入口地址,所以这个地址寻址在编译的时间可以决定是代码段内near跳转还是段间far跳转,现在windows程序都使用平坦内存模式,就不存在近跳转和远跳转了.