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

📄 3-3.htm

📁 介绍各种平台进行SOCKET编程的好东东。
💻 HTM
📖 第 1 页 / 共 2 页
字号:
      <p>&#9;&#9;&#9;{</p>
      <p>&#9;&#9;&#9;&#9;AlertUser(hWnd, "WSAStartup() failed\n");</p>
      <p>&#9;&#9;&#9;&#9;PostQuitMessage(0);</p>
      <p>&#9;&#9;&#9;}</p>
      </font> 
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;&#9;&#9;</font><font size=3>hostaddr 
        = gethostbyname(server_address);</font></p>
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;&#9;&#9;</font><font size=3>if 
        (hostaddr == NULL)</font></p>
      <font size=3> 
      <p>&#9;&#9;&#9;{</p>
      <p>&#9;&#9;&#9;&#9;AlertUser(hWnd, "gethostbyname ERROR!\n");</p>
      <p>&#9;&#9;&#9;&#9;WSACleanup();</p>
      <p>&#9;&#9;&#9;&#9;PostQuitMessage(0);</p>
      <p>&#9;&#9;&#9;}</p>
      <p>&#9;&#9;&#9;_fmemcpy(&amp;hostnm, hostaddr, sizeof(struct hostent));</p>
      <p>&#9;&#9;}</p>
      <p>&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;case WM_COMMAND:</p>
      <p>&#9;&#9;&#9;switch (wParam)</p>
      <p>&#9;&#9;&#9;{</p>
      <p>&#9;&#9;&#9;&#9;case IDM_START:</p>
      <p>&#9;&#9;&#9;&#9;&#9;if (!Client(hWnd))</p>
      <p>&#9;&#9;&#9;&#9;&#9;{</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;closesocket(s);</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;AlertUser(hWnd, "Start Failed");</p>
      <p>&#9;&#9;&#9;&#9;&#9;}</p>
      <p>&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;&#9;case IDM_EXIT:</p>
      <p>//&#9;&#9;&#9;&#9;&#9;WSACleanup();</p>
      <p>&#9;&#9;&#9;&#9;&#9;PostQuitMessage(0);</p>
      <p>&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;}</p>
      <p>&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;case UM_SOCK:</p>
      <p>&#9;&#9;&#9;switch (lParam)</p>
      <p>&#9;&#9;&#9;{</p>
      <p>&#9;&#9;&#9;&#9;case FD_CONNECT:</p>
      <p>&#9;&#9;&#9;&#9;&#9;if (!SetSelect(hWnd, FD_WRITE))</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;closesocket(s);</p>
      <p>&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;&#9;case FD_READ:</p>
      <p>&#9;&#9;&#9;&#9;&#9;if (!ReceivePacket(hWnd))</p>
      <p>&#9;&#9;&#9;&#9;&#9;{</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;AlertUser(hWnd, "Receive Packet Failed.\n");</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;closesocket(s);</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;&#9;&#9;}</p>
      <p>&#9;&#9;&#9;&#9;&#9;if (!SetSelect(hWnd, FD_WRITE))</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;closesocket(s);</p>
      <p>&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;&#9;case FD_WRITE:</p>
      </font> 
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;&#9;&#9;&#9;&#9;</font><font size=3>for 
        (i = 0; i &lt; 1024; i ++)</font></p>
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;&#9;&#9;&#9;&#9;&#9;</font><font size=3>buffer[i] 
        = (char)'A' + i % 26;</font></p>
      <font size=3> 
      <p>&#9;&#9;&#9;&#9;&#9;length = 1024;</p>
      <p>&#9;&#9;&#9;&#9;&#9;if (!SendPacket(hWnd, length))</p>
      <p>&#9;&#9;&#9;&#9;&#9;{</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;AlertUser(hWnd, "Packet Send Failed!\n");</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;closesocket(s);</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;&#9;&#9;}</p>
      <p>&#9;&#9;&#9;&#9;&#9;if (!SetSelect(hWnd, FD_READ))</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;closesocket(s);</p>
      <p>&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;&#9;case FD_CLOSE:</p>
      <p>&#9;&#9;&#9;&#9;&#9;if (WSAAsyncSelect(s, hWnd, 0, 0) == SOCKET_ERROR)</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;AlertUser(hWnd, "WSAAsyncSelect Failed.\n");</p>
      <p>&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;&#9;default:</p>
      <p>&#9;&#9;&#9;&#9;&#9;if (WSAGETSELECTERROR(lParam) != 0)</p>
      <p>&#9;&#9;&#9;&#9;&#9;{</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;AlertUser(hWnd, "Socket Report Failure.");</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;closesocket(s);</p>
      <p>&#9;&#9;&#9;&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;&#9;&#9;&#9;}</p>
      <p>&#9;&#9;&#9;&#9;&#9;break;</p>
      <p> }</p>
      <p>&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;case WM_DESTROY:</p>
      <p>&#9;&#9;&#9;closesocket(s);</p>
      <p>&#9;&#9;&#9;WSACleanup();</p>
      <p>&#9;&#9;&#9;PostQuitMessage(0);</p>
      <p>&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;default:</p>
      <p>&#9;&#9;&#9;return (DefWindowProc(hWnd, message, wParam, lParam));</p>
      <p>&#9;}</p>
      <p>&#9;return(NULL);</p>
      <p>}</p>
      <p>void AlertUser(HWND hWnd, char *message)</p>
      <p>{</p>
      <p>&#9;MessageBox(hWnd, (LPSTR)message, "Warning", MB_ICONEXCLAMATION);</p>
      <p>&#9;return;</p>
      <p>}</p>
      <p>BOOL Client(HWND hWnd)</p>
      </font><font face="宋体" lang="ZH-CN" size=3> 
      <p>{</p>
      </font> 
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;</font><font size=3>memset(&amp;dst_addr,'\0', 
        sizeof (struct sockaddr_in));</font></p>
      <font size=3> 
      <p>&#9;_fmemcpy((char FAR *)&amp;dst_addr.sin_addr,(char FAR *)hostnm.h_addr,hostnm.h_length);</p>
      <p>&#9;dst_addr.sin_family = hostnm.h_addrtype;</p>
      <p>&#9;dst_addr.sin_port = htons(USERPORT);</p>
      <p>&#9;if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)</p>
      <p>&#9;{</p>
      <p>&#9;&#9;AlertUser(hWnd, "Socket Failed");</p>
      <p>&#9;&#9;return (FALSE);</p>
      <p>&#9;}</p>
      <p>&#9;if (!SetSelect(hWnd, FD_CONNECT))</p>
      <p>&#9;&#9;return (FALSE);</p>
      <p>&#9;connect(s, (struct sockaddr FAR *)&amp;dst_addr, sizeof(dst_addr));</p>
      <p>&#9;return (TRUE);</p>
      <p>}</p>
      <p> </p>
      <p>BOOL ReceivePacket(HWND hWnd)</p>
      <p>{</p>
      <p>&#9;HDC hDc;</p>
      <p>&#9;int length;</p>
      <p>&#9;int i1,i2,i3;</p>
      <p>&#9;char line1[255], line2[255], line3[255];</p>
      <p>&#9;count ++;</p>
      <p>&#9;if ((length = recv(s, lpBuffer, 1024, 0)) == SOCKET_ERROR)</p>
      <p>&#9;&#9;return (FALSE);</p>
      <p>&#9;if (length == 0)</p>
      <p>&#9;&#9;return (FALSE);</p>
      <p>&#9;if (hDc = GetDC(hWnd))</p>
      <p>&#9;{</p>
      <p>&#9;&#9;i1 = wsprintf((LPSTR)line1, "TCP Echo Client No.%d", count);</p>
      <p>&#9;&#9;i2 = wsprintf((LPSTR)line2, "Receive %d bytes",length);</p>
      <p>&#9;&#9;i3 = wsprintf((LPSTR)line3, "Those are:%c, %c, %c, %c, %c, %c",buffer[0],buffer[1],buffer[2],buffer[100],buffer[1000],buffer[1023]);</p>
      <p>&#9;&#9;TextOut(hDc, 10, 2, (LPSTR)line1, i1);</p>
      <p>&#9;&#9;TextOut(hDc, 10, 22, (LPSTR)line2, i2);</p>
      <p>&#9;&#9;TextOut(hDc, 10, 42, (LPSTR)line3, i3);</p>
      <p>&#9;&#9;ReleaseDC(hWnd, hDc);</p>
      <p>&#9;}</p>
      <p>&#9;return (TRUE);</p>
      <p>}</p>
      <p> </p>
      <p>BOOL SetSelect(HWND hWnd, long lEvent)</p>
      <p>{</p>
      </font> 
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;</font><font size=3>if (WSAAsyncSelect(s, 
        hWnd, UM_SOCK, lEvent) == SOCKET_ERROR)</font></p>
      <font face="宋体" lang="ZH-CN" size=3> 
      <p>&#9;{</p>
      </font> 
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;&#9;</font><font size=3>AlertUser(hWnd, 
        "WSAAsyncSelect Failure.");</font></p>
      <font size=3> 
      <p>&#9;&#9;return (FALSE);</p>
      <p>&#9;}</p>
      <p>&#9;return (TRUE);</p>
      <p>}</p>
      <p>BOOL SendPacket(HWND hWnd, int len)</p>
      <p>{</p>
      <p>&#9;int length;</p>
      <p>&#9;if ((length = send(s, lpBuffer, len, 0)) == SOCKET_ERROR)</p>
      <p>&#9;&#9;return (FALSE);</p>
      <p>&#9;else</p>
      <p>&#9;if (length != len)</p>
      <p>&#9;{</p>
      <p>&#9;&#9;AlertUser(hWnd, "Send Length NOT Match!");</p>
      <p>&#9;&#9;return (FALSE);</p>
      <p>&#9;}</p>
      <p>&#9;return (TRUE);</p>
      <p>}</p>
      </font> 
      <p><font face="宋体" lang="ZH-CN" size=3>程序</font><font size=3>3:SERVER.C</font></p>
      <font size=3> 
      <p>#include &lt;sys/types.h&gt;</p>
      <p>#include &lt;sys/mntent.h&gt;</p>
      <p>#include &lt;netinet/in.h&gt;</p>
      <p>#include &lt;sys/socket.h&gt;</p>
      <p>#include &lt;arpa/inet.h&gt;</p>
      <p>#define USERPORT 10001</p>
      <p>#define HOST_IP_ADDR "192.1.1.2"</p>
      <p>main(int argc, char **argv)</p>
      <p>{</p>
      <p>&#9;char buf[1024];</p>
      <p>&#9;struct sockaddr_in client;</p>
      <p>&#9;struct sockaddr_in server;</p>
      <p>&#9;int s;</p>
      <p>&#9;int ns;</p>
      <p>&#9;int namelen;</p>
      <p>&#9;int pktlen;</p>
      <p>&#9;</p>
      <p>&#9;if ((s=socket(AF_INET, SOCK_STREAM, 0))&lt;0)</p>
      </font><font face="宋体" lang="ZH-CN" size=3> 
      <p>&#9;{</p>
      </font> 
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;&#9;</font><font size=3>perror("Socket()");</font></p>
      <font size=3> 
      <p>&#9;&#9;return;</p>
      <p>&#9;}</p>
      <p>&#9;bzero((char *)&amp;server,sizeof(server));</p>
      <p>&#9;server.sin_family = AF_INET;</p>
      <p>&#9;server.sin_port = htons(USERPORT);</p>
      <p>&#9;server.sin_addr.s_addr = INADDR_ANY;</p>
      <p>&#9;if (bind(s, (struct sockaddr *)&amp;server, sizeof(server))&lt;0)</p>
      <p>&#9;{</p>
      <p>&#9;&#9;perror("Bind()");</p>
      <p>&#9;&#9;return;</p>
      <p>&#9;}</p>
      <p>&#9;if (listen(s,1)!=0)</p>
      <p>&#9;{</p>
      <p>&#9;&#9;perror("Listen()");</p>
      <p>&#9;&#9;return;</p>
      <p>&#9;}</p>
      <p>&#9;namelen = sizeof(client);</p>
      <p>&#9;if ((ns = accept(s, (struct sockaddr *)&amp;client, &amp;namelen)) 
        ==-1)</p>
      <p>&#9;{</p>
      <p>&#9;&#9;perror("Accept()");</p>
      <p>&#9;&#9;return;</p>
      <p>&#9;}</p>
      <p>&#9;for (;;)</p>
      <p>&#9;{</p>
      <p>&#9;&#9;if ((pktlen = recv(ns,buf,1024,0))&lt;0)</p>
      <p>&#9;&#9;{</p>
      <p>&#9;&#9;&#9;perror("Recv()");</p>
      <p>&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;}</p>
      <p>&#9;&#9;else</p>
      <p>&#9;&#9;if (pktlen == 0)</p>
      <p>&#9;&#9;{</p>
      <p>&#9;&#9;&#9;printf("Recv():return FAILED,connection is shut down!\n");</p>
      <p>&#9;&#9;&#9;break;</p>
      <p>&#9;&#9;}</p>
      <p>&#9;&#9;else</p>
      <p>&#9;&#9;&#9;printf("Recv():return SUCCESS,packet length = %d\n",pktlen);</p>
      <p>&#9;&#9;sleep(1);</p>
      <p>&#9;&#9;if (send(ns,buf,pktlen,0)&lt;0)</p>
      <p>&#9;&#9;{</p>
      <p>&#9;&#9;&#9;perror("Send()");</p>
      <p>&#9;&#9;&#9;break;</p>
      </font><font face="宋体" lang="ZH-CN" size=3> 
      <p>&#9;&#9;}</p>
      </font> 
      <p><font face="宋体" lang="ZH-CN" size=3>&#9;&#9;</font><font size=3>else</font></p>
      <font size=3> 
      <p>&#9;&#9;&#9;printf("Send():return SUCCESS,packet length = %d\n",pktlen);</p>
      <p>&#9;}</p>
      <p>&#9;close(ns);</p>
      <p>&#9;close(s);</p>
      <p>&#9;printf("Server ended successfully\n");</p>
      </font><font face="宋体" lang="ZH-CN" size=3> 
      <p align="JUSTIFY">}</p>
      </font></td>
  </tr>
</table>
</body>
</html>

⌨️ 快捷键说明

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