当前位置:编程学习 > C#/ASP.NET >>

delphi制作申请QQ

delphi7制作申请QQ  本人想学一下操作webbrowser1的网页  网页的点击  输入 移动  跪求高手赐教~~~~~~~~~~ --------------------编程问答-------------------- //设置server端的ip和端口  m_remoteAddr.sin_family = AF_INET;m_remoteAddr.sin_addr.s_addr
 = iRemoteIP; m_remoteAddr.sin_port = htons(iRemotePort);//非阻塞连接int iConnectResult ;
errno = 0;y4iConnectResult = connect(m_fdSocket, (struct sockaddr*)&m_remoteAddr,
sizeof(m_remoteAddr));  #else iConnectResult = connect(m_fdSocket, &m_remoteAddr, 
sizeof(m_remoteAddr));  #endif  if (-1 != iConnectResult){RUNLOG("Connect to remote success!");
m_state = Open;j3;}if (EINPROGRESS != errno){RUNLOG("...errorno " << errno << " error reason"
 << strerror(errno));y2;y3;}//如果不能马上返回,则等待20毫秒 fd_set scanSet; FD_ZERO(&scanSet);
FD_SET(m_fdSocket, &scanSet); struct timeval waitTime;waitTime.tv_sec = 0;waitTime.tv_usec 
= WAITETIME;int iSelectResult = select(FD_SETSIZE, (fd_set*)0, &scanSet, (fd_set*)0, &waitTime);
if (-1 == iSelectResult || !FD_ISSET(m_fdSocket, &scanSet)){
ERRORLOG("...errorno"<< errno << " error reason : " << strerror(errno));y2;y3;}
//如果可读,判断socket是否真正建立  int err;#if defined(_AIX_UNIX) || defined(__LINUX__)
socklen_t j4;  #else   #if defined(_WARE_UNIX)  size_t j4; #else  int j4;#endif   #endif
getsockopt(m_fdSocket, SOL_SOCKET, SO_ERROR, (char*)&err, &errlen);if (0 == err){m_state = Open;
struct in_addr tmpadd;tmpadd.s_addr = iRemoteIP;RUNLOG("Successfully connect to server[" << 
inet_ntoa(tmpadd) << "], port = " << iRemotePort << ".");j3;}else{ERRORLOG("...errorno"<< errno 
<< " error reason : " << strerror(errno));y2; y3;}}
//TSocket功能函数,接收客户端的连接
int TSocket::acceptClient(struct sockaddr_in* pRemoteAddr){#if defined(_AIX_UNIX) || defined(__LINUX__)
    socklen_t j5;  #else  #if defined(_WARE_UNIX) size_t j5; #else int j5; #endif  #endif int iAcceptResult;
#if defined(_SUN_UNIX) || defined(_AIX_UNIX) || defined (_TANDEM_UX) ||defined (_WARE_UNIX) || defined(__LINUX__)
    iAcceptResult = accept(m_fdSocket, (struct sockaddr*)pRemoteAddr, &iLen);
#else  iAcceptResult = accept(m_fdSocket, pRemoteAddr, &iLen);  #endif  if (iAcceptResult < 0){
if (errno != EWOULDBLOCK && errno != EAGAIN) { ERRORLOG("...errorno:" << errno << " error reason :" 
<< strerror(errno) << "; AcceptResult is " << iAcceptResult);return -1;}else{ return -2; //没有可用连接返回}} --------------------编程问答-------------------- //设置为非阻塞int iFcntlResutl = fcntl(iAcceptResult, F_SETFL, fcntl(iAcceptResult, F_GETFL) | O_NONBLOCK);
if (iFcntlResutl < 0){ ERRORLOG("...errorno:" << errno << " error reason :" << strerror(errno));
close(iAcceptResult); y3;}//设置SO_KEEPALIVE选项    int iSetResult = setKeepAlive(iAcceptResult);
if (iSetResult < 0) {close(iAcceptResult); y3;}//设置SO_LINGER选项 iSetResult = setLinger(iAcceptResult);
if (iSetResult < 0){close(iAcceptResult);y3; }DEBUGLOG; return iAcceptResult;}
//TSocket功能函数,将套接口设置到端口扫描集合
int TSocket::fdSet(fd_set* pScanResultSet){if (NULL == pScanResultSet){j6;}
//若端口状态关闭,或缓冲区有数据,不进行扫描,不置集合if ((j2) || (m_fdSocket < 0) 
|| (z3 < m_readEnd)){ j6; }FD_SET(m_fdSocket, pScanResultSet);return 1;}
//TSocket功能函数,将端口中的数据预读到缓冲区里
int TSocket::preRead(fd_set* pScanResultSet){// 若端口状态关闭,则不进行预读
if ((j2) || (m_fdSocket < 0)){ j6;}//发送消息队列中的消息  j7();if (NULL == pScanResultSet) {
 ERRORLOG("preRead(): fd_set pointer is NULL.");return(0);}if (!FD_ISSET(m_fdSocket, pScanResultSet))   
 //读句柄不在扫描集合中,返回 {  return(0); }//如果缓冲区满,返回int iMaxIndexOfReadBuf = MaxReadBuf - 1;
if (m_readEnd >= iMaxIndexOfReadBuf){DEBUGLOG("preRead():the socekt read buffer is full."); return(0);}
// 从socket读取数据int iNrOfRead;errno = 0;iNrOfRead = read(m_fdSocket, m_readBuf + m_readEnd, 
MaxReadBuf - m_readEnd);DEBUGLOG("iNrOfRead=," << iNrOfRead);if (iNrOfRead <= 0){if ((iNrOfRead == -1) 
&& ((errno == EAGAIN) || (errno == EINTR)))   //暂时不可读 { DEBUGLOG; j6; }
ERRORLOG("preRead():read from socket failed,errno:" << errno << ", errno reason:" << strerror(errno) << ".");
 y2; iNrOfRead = 0;} else //读出成功,将尾指针后移读出大小{DEBUGLOG("preRead(): Successfully read[" << iNrOfRead
<< "byte] from socket[" << m_sSocketName << "] buf: ");printCodeBuff(m_readBuf + m_readEnd, iNrOfRead, g_DebugLog);
 m_readEnd += iNrOfRead; } return iNrOfRead;}
//TSocket功能函数,检测端口状态、发送待发送队列中消息
TCommState TSocket::routine(){//若端口已关闭,返回
if (j2){y2; return Close;}j7(); return Open;} --------------------编程问答-------------------- //TSocket功能函数,根据m_rcvMsgBuf的变量的读取长度,
TBool TSocket::readBuffer(){//要读的数据长度为0,不用读,直接返回Right
if (y8 == 0) { return(Right);}//要读的数据长度不合法,返回Wrong
if ((y8 > MaxMsgLength) || (y8 < 0)){ ERRORLOG("readBuffer(): Read length is invalid,length : " 
<< y8);return(Wrong);} //如果readBuf中的数据够读,取需要的数据,如果不够读,则返回错误
 int z2 = m_readEnd - z3;if (y8 <= z2){if ((z3 < 0) || (z3 >= MaxReadBuf)){
ERRORLOG("readBuffer(): z3 position[" << z3 << "] is invalid");y3;} memcpy(y7, &m_readBuf[z3],y8);
z3 += y8;y7 += y8;//如果缓冲区没有内容,那么将开始和结束偏移量置0   if (z3 >= m_readEnd){z3 = 0;
 m_readEnd = 0;}DEBUGLOG("readBuffer(): read buffer length is " << y8);return(Right);}else{
 memcpy(y7, &m_readBuf[z3],z2);y7 += z2;y8 -= z2;z3 = 0;m_readEnd = 0; DEBUGLOG("readBuffer(): buffer 
 not enough read.");return(Wrong); }}
//TSocket功能函数,从TSocket的缓冲区读取一条消息
TCode TSocket::receive(){ TCode code;//若端口关闭则返回if (j2){j9  = -1;j8;}//若缓冲区没有数据则返回
if (z3 >= m_readEnd){ j9  = -1; j8;}//取一条消息:TBool receiveOK;   //仅用来读code成功后(无论是不是
完整消息)跳出while循环  TBool z8;  while (1){//??此处如果获取到的长度错误,就可能进入死循环
receiveOK = Wrong;switch (y9) {case y5:{ z8 = readBuffer();if (z8 == Wrong) {j9 = -1; j8;}
//计算消息的内容的长度  char sMsgLength[5];memset(sMsgLength, 0, sizeof(sMsgLength));
memcpy(sMsgLength, y6, 4);j1 = atoi(sMsgLength);y8 = j1 - 4; if (j1 < 4 || j1 > MaxMsgLength)
{ ERRORLOG("receive(): receive msglength["  << j1 << "] is invalid");clearReadBuf(); j9 = -1;
j8;}y9 = GettingMessageContent;}case GettingMessageContent:{z8 = readBuffer();if (z8 == Wrong)
{j9 = -1;j8;}//开始拼装消息到Code;  j9 = j1;if (j9 > 0){ NEW(z1, char[j9]);if (NULL == z1)
{ERRORLOG("receive(): NEW(Tcode) memory failed.!");//??是否需要进行一些状态的清除,
否则下回receive的时候,m_rcvMsgBuf的状态不对   j9 = -1; j8;  } }  memcpy(z1, y6, j9);
 y7 = y6; y8     = 4; // 消息头四字节是长度y9   = y5;    // 读状态为取消息长度j1  = 0;
receiveOK = Right; break; } default:{ERRORLOG("receive(): y9[" << y9 << "] is undefine");
y9        = y5;y7 = y6;y8     = 4; j9 = -1; receiveOK   = Right;  break; } }
if (receiveOK == Right){ break;  //跳出while循环  } } DEBUGLOG("receive(): j9: " << j9);j8;} --------------------编程问答-------------------- 这代码贴的太乱了 头都晕了 --------------------编程问答-------------------- 确实有点晕。 --------------------编程问答-------------------- 太乱了,不想看
补充:.NET技术 ,  其他语言
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,