void szcopy(char* dest,const char* src,int nMaxBytes)
{
int i_cntr=0;
while ((src[i_cntr]!='\0') || (i_cntr<nMaxBytes))
dest[i_cntr]=src[i_cntr++];
dest[i_cntr]='\0';
}
BOOL SocketSend(SOCKET sckDest,const char* szHttp)
{
char szSendHeader[MAXHEADERLENGTH];
int iLen=strlen(szHttp);
szcopy(szSendHeader,szHttp,iLen);
if(send (sckDest ,(const char FAR *)szSendHeader ,iLen ,0)==SOCKET_ERROR)
{
closesocket(sckDest);
AfxMessageBox("Error when send");
return FALSE;
}
return TRUE;
}
BOOL SocketSend(SOCKET sckDest,CString szHttp)
{
int iLen=szHttp.GetLength();
if(send (sckDest,szHttp,iLen,0)==SOCKET_ERROR)
{
closesocket(sckDest);
AfxMessageBox("Error when send");
return FALSE;
}
return TRUE;
}
(4)用于连接的函数
这里是做了一些连接用的操作,分了两种情况
1)。如果没有使用代理,则直接连到你指定的计算机
2)。如果使用了代理,则直接连到代理
BOOL CDLAngelDlg::ConnectHttp()
{
message="正在建立连接\n";
UpdateData(TRUE);
if(m_combo=="HTTP") // m_combo 一个下拉条
{
HTTPSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SocketAddr.sin_addr.s_addr = inet_addr (m_ProxyAddr);
SocketAddr.sin_family=AF_INET;
SocketAddr.sin_port=htons(atoi(m_Port));
struct fd_set fdSet;
struct timeval tmvTimeout={0L,0L};
FD_ZERO(&fdSet);
FD_SET(HTTPSocket, &fdSet);
if (select(0,&fdSet,NULL,NULL,&tmvTimeout)==SOCKET_ERROR)
{
closesocket(HTTPSocket);
AfxMessageBox("Error when select.");
return 0;
}
if (connect(HTTPSocket, (const struct sockaddr *)&SocketAddr, sizeof(SocketAddr))==SOCKET_ERROR)
{
message="\n代理连接失败\n";
m_message.CleanText();
m_message.AddText(message);
return 0;
}
// 发送CONNCET请求令到代理服务器,用于和代理建立连接
//代理服务器的地址和端口放在m_ProxyAddr,m_Port 里面