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

📄 vcc40.htm

📁 SHELL排序算法与应用
💻 HTM
📖 第 1 页 / 共 2 页
字号:
          {printf(&quot;Client Close connection\n&quot;);<br>
          if(SPair.IsUser_ProxyClosed==FALSE)<br>
          {closesocket(SPair.user_proxy);<br>
          SPair.IsUser_ProxyClosed=TRUE;<br>
          }<br>
          }<br>
          Len=retval;<br>
          #ifdef _DEBUG<br>
          <br>
          Buffer[Len]=0;<br>
          printf(&quot;\n Received %d bytes,data[%s]from client\n&quot;,retval,Buffer);<br>
          #endif<br>
          //<br>
          SPair.IsUser_ProxyClosed=FALSE;<br>
          SPair.IsProxy_ServerClosed=TRUE;<br>
          SPair.user_proxy=msg_socket;<br>
          <br>
          ProxyP.pPair=&amp;SPair;<br>
          ProxyP.User_SvrOK=CreateEvent(NULL,TRUE,FALSE,NULL);<br>
          <br>
          GetAddressAndPort( Buffer,ProxyP.Address,&amp;ProxyP.Port);<br>
          <br>
          pChildThread=AfxBeginThread(ProxyToServer,(LPVOID)&amp;ProxyP);<br>
          ::WaitForSingleObject(ProxyP.User_SvrOK,60000); //等待联结<br>
          ::CloseHandle(ProxyP.User_SvrOK);<br>
          <br>
          while(SPair.IsProxy_ServerClosed ==FALSE &amp;&amp; SPair.IsUser_ProxyClosed==FALSE)<br>
          { <br>
          retval=send(SPair.proxy_server,Buffer,Len,0);<br>
          if(retval==SOCKET_ERROR)<br>
          { printf(&quot;\n send() failed:error%d\n&quot;,WSAGetLastError());<br>
          if(SPair.IsProxy_ServerClosed==FALSE)<br>
          {<br>
          closesocket(SPair.proxy_server);<br>
          SPair.IsProxy_ServerClosed=TRUE;<br>
          }<br>
          continue;<br>
          }<br>
          retval=recv(SPair.user_proxy,Buffer,sizeof(Buffer),0);<br>
          <br>
          if(retval==SOCKET_ERROR)<br>
          { printf(&quot;\nError Recv&quot;); <br>
          if(SPair.IsUser_ProxyClosed==FALSE)<br>
          {closesocket(SPair.user_proxy);<br>
          SPair.IsUser_ProxyClosed=TRUE;<br>
          }<br>
          continue;<br>
          }<br>
          if(retval==0)<br>
          {printf(&quot;Client Close connection\n&quot;);<br>
          if(SPair.IsUser_ProxyClosed==FALSE)<br>
          {closesocket(SPair.user_proxy);<br>
          SPair.IsUser_ProxyClosed=TRUE;<br>
          }<br>
          break;<br>
          }<br>
          Len=retval;<br>
          #ifdef _DEBUG<br>
          Buffer[Len]=0;<br>
          printf(&quot;\n Received %d bytes,data[%s]from client\n&quot;,retval,Buffer);<br>
          #endif<br>
          <br>
          } //End While<br>
          <br>
          if(SPair.IsProxy_ServerClosed==FALSE)<br>
          {<br>
          closesocket(SPair.proxy_server);<br>
          SPair.IsProxy_ServerClosed=TRUE;<br>
          }<br>
          if(SPair.IsUser_ProxyClosed==FALSE)<br>
          {closesocket(SPair.user_proxy);<br>
          SPair.IsUser_ProxyClosed=TRUE;<br>
          }<br>
          ::WaitForSingleObject(pChildThread- &gt;m_hThread,20000); //Should check 
          the <br>
          return value<br>
          return 0;<br>
          }<br>
          <br>
          // 读取远程主机数据,并发往本地客户机<br>
          UINT ProxyToServer(LPVOID pParam){<br>
          ProxyParam * pPar=(ProxyParam*)pParam;<br>
          char Buffer[BUFSIZE];<br>
          char *server_name= &quot;localhost&quot;;<br>
          unsigned short port ;<br>
          int retval,Len;<br>
          unsigned int addr;<br>
          int socket_type ;<br>
          struct sockaddr_in server;<br>
          struct hostent *hp;<br>
          SOCKET conn_socket;<br>
          <br>
          socket_type = SOCK_STREAM;<br>
          server_name = pPar- &gt;Address;<br>
          port = pPar- &gt;Port;<br>
          <br>
          if (isalpha(server_name[0])) { /* server address is a name */<br>
          hp = gethostbyname(server_name);<br>
          }<br>
          else { /* Convert nnn.nnn address to a usable one */<br>
          addr = inet_addr(server_name);<br>
          hp = gethostbyaddr((char *)&amp;addr,4,AF_INET);<br>
          }<br>
          if (hp == NULL ) {<br>
          fprintf(stderr,&quot;Client: Cannot resolve address [%s]: Error %d\n&quot;,<br>
          server_name,WSAGetLastError());<br>
          ::SetEvent(pPar- &gt;User_SvrOK); <br>
          return 0;<br>
          }<br>
          <br>
          //<br>
          // Copy the resolved information into the sockaddr_in structure<br>
          //<br>
          memset(&amp;server,0,sizeof(server));<br>
          memcpy(&amp;(server.sin_addr),hp- &gt;h_addr,hp- &gt;h_length);<br>
          server.sin_family = hp- &gt;h_addrtype;<br>
          server.sin_port = htons(port);<br>
          <br>
          conn_socket = socket(AF_INET,socket_type,0); /* 打开一个 socket */<br>
          if (conn_socket &lt; 0 ) {<br>
          fprintf(stderr,&quot;Client: Error Opening socket: Error %d\n&quot;,<br>
          WSAGetLastError());<br>
          pPar- &gt;pPair- &gt;IsProxy_ServerClosed=TRUE;<br>
          ::SetEvent(pPar- &gt;User_SvrOK); <br>
          return -1;<br>
          }<br>
          <br>
          <br>
          #ifdef _DEBUG<br>
          printf(&quot;Client connecting to: %s\n&quot;,hp- &gt;h_name);<br>
          #endif<br>
          if (connect(conn_socket,(struct sockaddr*)&amp;server,sizeof(server))<br>
          == SOCKET_ERROR) {<br>
          fprintf(stderr,&quot;connect() failed: %d\n&quot;,WSAGetLastError());<br>
          pPar- &gt;pPair- &gt;IsProxy_ServerClosed=TRUE; <br>
          ::SetEvent(pPar- &gt;User_SvrOK); <br>
          return -1;<br>
          }<br>
          pPar- &gt;pPair- &gt;proxy_server=conn_socket;<br>
          pPar- &gt;pPair- &gt;IsProxy_ServerClosed=FALSE;<br>
          ::SetEvent(pPar- &gt;User_SvrOK);<br>
          // cook up a string to send<br>
          while(!pPar- &gt;pPair- &gt;IsProxy_ServerClosed &amp;&amp;!pPar- &gt;pPair-&gt;IsUser_ProxyClosed)<br>
          {<br>
          retval = recv(conn_socket,Buffer,sizeof (Buffer),0 );<br>
          if (retval == SOCKET_ERROR ) {<br>
          fprintf(stderr,&quot;recv() failed: error %d\n&quot;,WSAGetLastError());<br>
          closesocket(conn_socket);<br>
          pPar- &gt;pPair- &gt;IsProxy_ServerClosed=TRUE;<br>
          break;<br>
          }<br>
          Len=retval;<br>
          if (retval == 0) {<br>
          printf(&quot;Server closed connection\n&quot;);<br>
          closesocket(conn_socket);<br>
          pPar- &gt;pPair- &gt;IsProxy_ServerClosed=TRUE;<br>
          break;<br>
          }<br>
          <br>
          retval = send(pPar- &gt;pPair- &gt;user_proxy,Buffer,Len,0);<br>
          if (retval == SOCKET_ERROR) {<br>
          fprintf(stderr,&quot;send() failed: error %d\n&quot;,WSAGetLastError());<br>
          closesocket(pPar- &gt;pPair- &gt;user_proxy);<br>
          pPar- &gt;pPair- &gt;IsUser_ProxyClosed=TRUE;<br>
          break; <br>
          }<br>
          #ifdef _DEBUG <br>
          Buffer[Len]=0; <br>
          printf(&quot;Received %d bytes, data [%s] from server\n&quot;,retval,Buffer);<br>
          #endif<br>
          }<br>
          if(pPar- &gt;pPair- &gt;IsProxy_ServerClosed==FALSE)<br>
          {<br>
          closesocket(pPar- &gt;pPair- &gt;proxy_server);<br>
          pPar- &gt;pPair- &gt;IsProxy_ServerClosed=TRUE;<br>
          }<br>
          if(pPar- &gt;pPair- &gt;IsUser_ProxyClosed==FALSE)<br>
          {closesocket(pPar- &gt;pPair- &gt;user_proxy);<br>
          pPar- &gt;pPair- &gt;IsUser_ProxyClosed=TRUE;<br>
          }<br>
          return 1;<br>
          }<br>
          <br>
          <br>
          <br>
          int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])<br>
          {<br>
          int nRetCode = 0;<br>
          <br>
          // 初始化SOCKET<br>
          if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))<br>
          {<br>
          // 错误处理<br>
          cerr &lt; &lt; _T(&quot;Fatal Error: MFC initialization failed&quot;) 
          &lt; &lt; endl;<br>
          nRetCode = 1;<br>
          }<br>
          else<br>
          {<br>
          // 主程序开始.<br>
          StartServer(); <br>
          while(1) <br>
          if(getchar()==`q`) break;<br>
          CloseServer();<br>
          }<br>
          <br>
          return nRetCode;<br>
          } <br>
          转自《中国程序员网站》 </span></font></p>
         
      </td>
    </tr>
    </tbody> 
  </table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

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