📄 vcc40.htm
字号:
{printf("Client Close connection\n");<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("\n Received %d bytes,data[%s]from client\n",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=&SPair;<br>
ProxyP.User_SvrOK=CreateEvent(NULL,TRUE,FALSE,NULL);<br>
<br>
GetAddressAndPort( Buffer,ProxyP.Address,&ProxyP.Port);<br>
<br>
pChildThread=AfxBeginThread(ProxyToServer,(LPVOID)&ProxyP);<br>
::WaitForSingleObject(ProxyP.User_SvrOK,60000); //等待联结<br>
::CloseHandle(ProxyP.User_SvrOK);<br>
<br>
while(SPair.IsProxy_ServerClosed ==FALSE && SPair.IsUser_ProxyClosed==FALSE)<br>
{ <br>
retval=send(SPair.proxy_server,Buffer,Len,0);<br>
if(retval==SOCKET_ERROR)<br>
{ printf("\n send() failed:error%d\n",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("\nError Recv"); <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("Client Close connection\n");<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("\n Received %d bytes,data[%s]from client\n",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- >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= "localhost";<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- >Address;<br>
port = pPar- >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 *)&addr,4,AF_INET);<br>
}<br>
if (hp == NULL ) {<br>
fprintf(stderr,"Client: Cannot resolve address [%s]: Error %d\n",<br>
server_name,WSAGetLastError());<br>
::SetEvent(pPar- >User_SvrOK); <br>
return 0;<br>
}<br>
<br>
//<br>
// Copy the resolved information into the sockaddr_in structure<br>
//<br>
memset(&server,0,sizeof(server));<br>
memcpy(&(server.sin_addr),hp- >h_addr,hp- >h_length);<br>
server.sin_family = hp- >h_addrtype;<br>
server.sin_port = htons(port);<br>
<br>
conn_socket = socket(AF_INET,socket_type,0); /* 打开一个 socket */<br>
if (conn_socket < 0 ) {<br>
fprintf(stderr,"Client: Error Opening socket: Error %d\n",<br>
WSAGetLastError());<br>
pPar- >pPair- >IsProxy_ServerClosed=TRUE;<br>
::SetEvent(pPar- >User_SvrOK); <br>
return -1;<br>
}<br>
<br>
<br>
#ifdef _DEBUG<br>
printf("Client connecting to: %s\n",hp- >h_name);<br>
#endif<br>
if (connect(conn_socket,(struct sockaddr*)&server,sizeof(server))<br>
== SOCKET_ERROR) {<br>
fprintf(stderr,"connect() failed: %d\n",WSAGetLastError());<br>
pPar- >pPair- >IsProxy_ServerClosed=TRUE; <br>
::SetEvent(pPar- >User_SvrOK); <br>
return -1;<br>
}<br>
pPar- >pPair- >proxy_server=conn_socket;<br>
pPar- >pPair- >IsProxy_ServerClosed=FALSE;<br>
::SetEvent(pPar- >User_SvrOK);<br>
// cook up a string to send<br>
while(!pPar- >pPair- >IsProxy_ServerClosed &&!pPar- >pPair->IsUser_ProxyClosed)<br>
{<br>
retval = recv(conn_socket,Buffer,sizeof (Buffer),0 );<br>
if (retval == SOCKET_ERROR ) {<br>
fprintf(stderr,"recv() failed: error %d\n",WSAGetLastError());<br>
closesocket(conn_socket);<br>
pPar- >pPair- >IsProxy_ServerClosed=TRUE;<br>
break;<br>
}<br>
Len=retval;<br>
if (retval == 0) {<br>
printf("Server closed connection\n");<br>
closesocket(conn_socket);<br>
pPar- >pPair- >IsProxy_ServerClosed=TRUE;<br>
break;<br>
}<br>
<br>
retval = send(pPar- >pPair- >user_proxy,Buffer,Len,0);<br>
if (retval == SOCKET_ERROR) {<br>
fprintf(stderr,"send() failed: error %d\n",WSAGetLastError());<br>
closesocket(pPar- >pPair- >user_proxy);<br>
pPar- >pPair- >IsUser_ProxyClosed=TRUE;<br>
break; <br>
}<br>
#ifdef _DEBUG <br>
Buffer[Len]=0; <br>
printf("Received %d bytes, data [%s] from server\n",retval,Buffer);<br>
#endif<br>
}<br>
if(pPar- >pPair- >IsProxy_ServerClosed==FALSE)<br>
{<br>
closesocket(pPar- >pPair- >proxy_server);<br>
pPar- >pPair- >IsProxy_ServerClosed=TRUE;<br>
}<br>
if(pPar- >pPair- >IsUser_ProxyClosed==FALSE)<br>
{closesocket(pPar- >pPair- >user_proxy);<br>
pPar- >pPair- >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 < < _T("Fatal Error: MFC initialization failed")
< < 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 + -