⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5-1.html

📁 WinSock编程规范及应用
💻 HTML
📖 第 1 页 / 共 5 页
字号:
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>若无错误发生,则</FONT><FONT SIZE=3>connect()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>返回</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。否则的话,返回</FONT><FONT SIZE=3>SOCKET_ERROR</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>错误,应用程序可通过</FONT><FONT SIZE=3>WSAGetLastError()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>获取相应错误代码。对阻塞套接口而言,若返回值为</FONT><FONT SIZE=3>SOCKET_ERROR</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>则应用程序调用</FONT><FONT SIZE=3>WSAGetLsatError()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。如果它指出错误代码为</FONT><FONT SIZE=3>WSAEWOULDBLOCK</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,则您的应用程序可以:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  1.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>用</FONT><FONT SIZE=3>select()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,通过检查套接口是否可写,来确定连接请求是否完成。或者,</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  2.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>如果您的应用程序使用基于消息的</FONT><FONT SIZE=3>WSAAsynSelect()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>来表示对连接事件的兴趣,则当连接操作完成后,您会收到一个</FONT><FONT SIZE=3>FD_CONNECT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>消息。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">错误代码:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENOTINITIALISED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:在使用此</FONT><FONT SIZE=3>API</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>之前应首先成功地调用</FONT><FONT SIZE=3>WSAStartup()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENETDOWN</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:</FONT><FONT SIZE=3>WINDOWS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>套接口实现检测到网络子系统失效。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEADDRINUSE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:所指的地址已在使用中。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEINTR</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:通过一个</FONT><FONT SIZE=3>WSACancelBlockingCall()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>来取消一个(阻塞的)调用。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEINPROGRESS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:一个阻塞的</FONT><FONT SIZE=3>WINDOWS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>套接口调用正在运行中。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEADDRNOTAVAIL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:在本地机器上找不到所指的地址。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENOTSUPPORT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:所指族中地址无法与本套接口一起使用。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAECONNREFUSED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:连接尝试被强制拒绝。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEDESTADDREQ</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:需要目的地址。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEFAULT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:</FONT><FONT SIZE=3>namelen</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>参数不正确。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEINVAL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:套接口没有准备好与一地址捆绑。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEISCONN</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:套接口早已连接。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEMFILE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:无多余文件描述字。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENETUNREACH</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:当前无法从本主机访问网络。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENOBUFS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:无可用缓冲区。套接口未被连接。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENOTSOCK</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:描述字不是一个套接口。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAETIMEOUT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:超时时间到。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEWOULDBLOCK</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:套接口设置为非阻塞方式且连接不能立即建立。可用</FONT><FONT SIZE=3>select()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>调用对套接口写,因为</FONT><FONT SIZE=3>select()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>时会进行连接。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">参见:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  accept(), bind(), getsockname(), socket(), select(), WSAAsyncSelect().</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P><A NAME="_Toc336626835"><A NAME="_Toc336792918"><A NAME="_Toc336793394"></FONT><FONT SIZE=5>5.1.5 getpeername()</A></A></A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">简述:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>获取与套接口相连的端地址。</P>
<P ALIGN="JUSTIFY"></P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  #include &lt;winsock.h&gt;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">  int PASCAL FAR getpeername( SOCKET s, struct sockaddr FAR* name,</P>
<P ALIGN="JUSTIFY">  int FAR* namelen);</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">  s</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:标识一已连接套接口的描述字。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  name</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:接收端地址的名字结构。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  namelen</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:一个指向名字结构的指针。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">注释:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  getpeername()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数用于从端口</FONT><FONT SIZE=3>s</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中获取与它捆绑的端口名,并把它存放在</FONT><FONT SIZE=3>sockaddr</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>类型的</FONT><FONT SIZE=3>name</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构中。它适用于数据报或流类套接口。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">返回值:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>若无错误发生,</FONT><FONT SIZE=3>getpeername()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>返回</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。否则的话,返回</FONT><FONT SIZE=3>SOCKET_ERROR</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,应用程序可通过</FONT><FONT SIZE=3>WSAGetLastError()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>来获取相应的错误代码。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">错误代码:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSANOTINITIALISED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:在使用此</FONT><FONT SIZE=3>API</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>之前应首先成功地调用</FONT><FONT SIZE=3>WSAStartup()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENETDOWN</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:</FONT><FONT SIZE=3>WINDOWS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>套接口实现检测到网络子系统失效。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEFAULT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:</FONT><FONT SIZE=3>namelen</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>参数不够大。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEINPROGRESS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:一个阻塞的</FONT><FONT SIZE=3>WINDOWS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>套接口调用正在运行中。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENOTCONN </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>套接口未连接。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENOTSOCK</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:描述字不是一个套接口。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">参见:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  bind(), socket(), getsockname().</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P><A NAME="_Toc336626836"><A NAME="_Toc336792919"><A NAME="_Toc336793395"></FONT><FONT SIZE=5>5.1.6 getsockname()</A></A></A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">简述:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>获取一个套接口的本地名字。</P>
<P ALIGN="JUSTIFY"></P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  #include &lt;winsock.h&gt;</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">  int PASCAL FAR getsockname( SOCKET s, struct sockaddr FAR* name,</P>
<P ALIGN="JUSTIFY">  int FAR* namelen);</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">  s</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:标识一个已捆绑套接口的描述字。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  name</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:接收套接口的地址(名字)。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  namelen</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:名字缓冲区长度。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">注释:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  getsockname()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数用于获取一个套接口的名字。它用于一个已捆绑或已连接套接口</FONT><FONT SIZE=3>s</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,本地地址将被返回。本调用特别适用于如下情况:未调用</FONT><FONT SIZE=3>bind()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>就调用了</FONT><FONT SIZE=3>connect()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,这时唯有</FONT><FONT SIZE=3>getsockname()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>调用可以获知系统内定的本地地址。在返回时,</FONT><FONT SIZE=3>namelen</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>参数包含了名字的实际字节数。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>若一个套接口与</FONT><FONT SIZE=3>INADDR_ANY</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>捆绑,也就是说该套接口可以用任意主机的地址,此时除非调用</FONT><FONT SIZE=3>connect()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>或</FONT><FONT SIZE=3>accept()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>来连接,否则</FONT><FONT SIZE=3>getsockname()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>将不会返回主机</FONT><FONT SIZE=3>IP</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>地址的任何信息。除非套接口被连接,</FONT><FONT SIZE=3>WINDOWS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>套接口应用程序不应假设</FONT><FONT SIZE=3>IP</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>地址会从</FONT><FONT SIZE=3>INADDR_ANY</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>变成其他地址。这是因为对于多个主机环境下,除非套接口被连接,否则该套接口所用的</FONT><FONT SIZE=3>IP</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>地址是不可知的。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">返回值:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>若无错误发生,</FONT><FONT SIZE=3>getsockname()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>返回</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。否则的话,返回</FONT><FONT SIZE=3>SOCKET_ERROR</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>错误,应用程序可通过</FONT><FONT SIZE=3>WSAGetLastError()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>获取相应错误代码。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">错误代码:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSANOTINITIALISED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:在使用此</FONT><FONT SIZE=3>API</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>之前应首先成功地调用</FONT><FONT SIZE=3>WSAStartup()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAENETDOWN</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:</FONT><FONT SIZE=3>WINDOWS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>套接口实现检测到网络子系统失效。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEFAULT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:</FONT><FONT SIZE=3>namelen</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>参数不够大。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">  WSAEINPROGRESS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>:一个阻塞的</FONT><FONT SIZE=3>WINDOWS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>套接口调用正在运行中。</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -