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

📄 cwclient.cpp

📁 早期的WINDOWS编程,适合刚接触WINDOWS编程的初学者
💻 CPP
字号:
#include "stdhdrs.h"
#include "common.h"
#include "WSockRes.h"
#include "cwclient.h"

int CWClient::ConnectToServer(u_short usPortNo, LPCSTR strServerName,HWND hWndClient)
{

	#ifdef _WS_VERBOSE
		WS_TRACE0("In ConnectToServer\n");
	#endif

	m_hWndClient = hWndClient;

	sock = socket(AF_INET, SOCK_STREAM,0);
	if (sock == INVALID_SOCKET){
		WS_TRACE0("ConnectToServer: socket error-");
		PrintError();
		return WSAGetLastError();
	}

	dest_sin.sin_family = AF_INET;
   
	PHOSTENT phe;

	if (strServerName == NULL){	
		DWORD	dwSize;
		char	szBuff[128];
	
   		dwSize = sizeof(szBuff);
   		gethostname(szBuff, dwSize);

   		phe = gethostbyname(szBuff);
	} else {
		phe = gethostbyname(strServerName);
	}

	if (phe == NULL){
   		WS_TRACE0("ConnectToServer: GetHostByName error-");
		PrintError();
   		return WSAGetLastError();
	}

	memcpy((char FAR*)&(dest_sin.sin_addr), phe->h_addr,phe->h_length);
	dest_sin.sin_port = htons(usPortNo);
   //or
   //PSERVENT pse = getservrbyname(szBuff,"tcp");
   //if (pse == NULL)
   // return;
   //dest_sin.sin_port = pse->s_port;

	int SetOpVal = 1;
	setsockopt(SOL_SOCKET, SO_DONTLINGER,&SetOpVal,sizeof(SetOpVal));
	setsockopt(SOL_SOCKET, SO_KEEPALIVE, &SetOpVal,sizeof(SetOpVal));

  WS_TRACE0("ConnectToServer::WSAAsyncSelect\n");
  
  if (IsWindow(m_hWndClient))
  	WSAAsyncSelect(sock, m_hWndClient, WSA_EVENT, FD_READ | FD_CLOSE | FD_WRITE | FD_CONNECT | FD_OOB);

int err = connect(sock,(PSOCKADDR)&dest_sin, sizeof(dest_sin));

if (err < 0){
   		WS_TRACE0("ConnectToServer: connect error-");
 		PrintError();
        WS_TRACE0("\n");
        if (WSAGetLastError() != WSAEWOULDBLOCK)
		    return WSAGetLastError();
	}

#ifdef _WS_VERBOSE
   WS_TRACE0("ConnectToServer: Connected and returning\n");
#endif

	return 0;

}

⌨️ 快捷键说明

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