锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲狠狠婷婷,欧美午夜精品理论片a级大开眼界,久久久久久97三级http://m.shnenglu.com/aurain/category/6202.html涓撴敞Windows涓嬬殑椹卞姩寮鍙戙佺綉緇滃紑鍙?/description>zh-cnThu, 13 Mar 2014 18:03:39 GMTThu, 13 Mar 2014 18:03:39 GMT60TCP榪炴帴鍏抽棴鐘舵佽漿鎹㈠浘http://m.shnenglu.com/aurain/archive/2014/03/13/206149.html姘?/dc:creator>姘?/author>Thu, 13 Mar 2014 05:22:00 GMThttp://m.shnenglu.com/aurain/archive/2014/03/13/206149.htmlhttp://m.shnenglu.com/aurain/comments/206149.htmlhttp://m.shnenglu.com/aurain/archive/2014/03/13/206149.html#Feedback0http://m.shnenglu.com/aurain/comments/commentRss/206149.htmlhttp://m.shnenglu.com/aurain/services/trackbacks/206149.html闃呰鍏ㄦ枃

]]>
璁ㄨ:鍏充簬瀹㈡埛绔嬌鐢ㄤ綍縐嶇綉緇滄ā鍨?/title><link>http://m.shnenglu.com/aurain/archive/2008/10/10/63666.html</link><dc:creator>姘?/dc:creator><author>姘?/author><pubDate>Fri, 10 Oct 2008 08:34:00 GMT</pubDate><guid>http://m.shnenglu.com/aurain/archive/2008/10/10/63666.html</guid><wfw:comment>http://m.shnenglu.com/aurain/comments/63666.html</wfw:comment><comments>http://m.shnenglu.com/aurain/archive/2008/10/10/63666.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://m.shnenglu.com/aurain/comments/commentRss/63666.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/aurain/services/trackbacks/63666.html</trackback:ping><description><![CDATA[     鎽樿: Windows緗戠粶搴旂敤涓紝瀵逛簬鏈嶅姟绔垜浠竴鑸細閫夋嫨Windows鎻愪緵鐨処O妯″瀷錛屽瀹屾垚绔彛妯″瀷IOCP銆?<br>瀵逛簬瀹㈡埛绔渶瑕佷富鍔ㄨ繛鎺ュ涓笉鍚孖P鐨凾CP鐨勬儏鍐碉紙10鎴栨洿澶氾級錛岄偅涔堜嬌鐢ㄤ粈涔堟ā鍨嬫瘮杈冨ソ鍛紵  <a href='http://m.shnenglu.com/aurain/archive/2008/10/10/63666.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/aurain/aggbug/63666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/aurain/" target="_blank">姘?/a> 2008-10-10 16:34 <a href="http://m.shnenglu.com/aurain/archive/2008/10/10/63666.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Winsock鐨勪袱縐岻/O妯″紡http://m.shnenglu.com/aurain/archive/2008/02/26/43262.html姘?/dc:creator>姘?/author>Tue, 26 Feb 2008 07:39:00 GMThttp://m.shnenglu.com/aurain/archive/2008/02/26/43262.htmlhttp://m.shnenglu.com/aurain/comments/43262.htmlhttp://m.shnenglu.com/aurain/archive/2008/02/26/43262.html#Feedback2http://m.shnenglu.com/aurain/comments/commentRss/43262.htmlhttp://m.shnenglu.com/aurain/services/trackbacks/43262.html闃誨妯″紡錛氭墽琛?/span>I/O鎿嶄綔瀹屾垚鍓嶄細涓鐩磋繘琛岀瓑寰咃紝涓嶄細灝嗘帶鍒舵潈浜ょ粰紼嬪簭銆傚鎺ュ瓧 榛樿涓洪樆濉炴ā寮忋傚彲浠ラ氳繃澶氱嚎紼嬫妧鏈繘琛屽鐞嗐?/span>
闈為樆濉炴ā寮忥細鎵цI/O鎿嶄綔鏃訛紝Winsock鍑芥暟浼氳繑鍥炲茍浜ゅ嚭鎺у埗鏉冦傝繖縐嶆ā寮忎嬌鐢?/span> 璧鋒潵姣旇緝澶嶆潅錛屽洜涓哄嚱鏁板湪娌℃湁榪愯瀹屾垚灝辮繘琛岃繑鍥烇紝浼氫笉鏂湴榪斿洖 WSAEWOULDBLOCK閿欒銆備絾鍔熻兘寮哄ぇ銆?/span>

]]>
緗戠粶緙栫▼鍩虹http://m.shnenglu.com/aurain/archive/2008/02/25/43202.html姘?/dc:creator>姘?/author>Mon, 25 Feb 2008 05:40:00 GMThttp://m.shnenglu.com/aurain/archive/2008/02/25/43202.htmlhttp://m.shnenglu.com/aurain/comments/43202.htmlhttp://m.shnenglu.com/aurain/archive/2008/02/25/43202.html#Feedback0http://m.shnenglu.com/aurain/comments/commentRss/43202.htmlhttp://m.shnenglu.com/aurain/services/trackbacks/43202.htmlBerkeley Socket

          鍏蜂綋鐨勫疄鐜頒篃灝辨槸鎸夎繖涓祦紼嬪浘鏉ュ仛鐨勶紝榪欓噷閲嶇偣鏄湇鍔$鐨勫疄鐜般?/p>

int APIENTRY _tWinMain(HINSTANCE hInstance,
                      HINSTANCE hPrevInstance,
                      LPTSTR     lpCmdLine,
                     
int        nCmdShow)
{
            ofstream logfile(
"LogFile.txt");
           
//Initialize winsock
            WSADATA wsaData;
            
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData);
            
if(iResult != NO_ERROR)
             {
                     logfile
<<"Error at WSAStartup() ";    
                     logfile.close();
                    
return 1;
             }
            
else    
                    logfile
<<"Initialize WSAStartup OK!";
    
             
// Create a socket.
             SOCKET serverSocket;
             serverSocket
= socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

             
if(serverSocket == INVALID_SOCKET)
              {    
                      logfile
<<"Error at socket():"<<WSAGetLastError()<<endl;;
                      logfile.close();
                      WSACleanup();
                      
return 1;
              }
             
else
             {
                      logfile
<<"Create socket OK!";
              }

            
// Bind the socket.
              sockaddr_in service;

              service.sin_family
=AF_INET;
              service.sin_addr.s_addr
=inet_addr(HostIp.c_str());
              service.sin_port
=htons(PORT);

              
if (bind(serverSocket,(SOCKADDR*)&service,sizeof(service))==SOCKET_ERROR)
              {
                       logfile
<<"bind() failed"<<GetLastError()<<endl;
                       closesocket(serverSocket);
                       logfile.close();
                      
return 1;
              }
             
else
              {
             logfile
<<"Binding OK!"<<endl;
               }
    
    
              
// Listen on the socket.
               if(listen(serverSocket,1)==SOCKET_ERROR)
               {
                       logfile
<<"Error listening on socket"<<GetLastError()<<endl;
                       logfile.close();
                }
               
else
                {
                       logfile
<<"Listening..."<<endl;
                 }

                
// Accept connections.
                 SOCKET clientSocket;
                 sockaddr_in clientAddr;
                
int clientAddrLen=sizeof(clientAddr);
   
                
while(true)
                 {
                            clientSocket
= SOCKET_ERROR;
                           
while(clientSocket==SOCKET_ERROR)
                            {
                                   clientSocket
=accept(serverSocket,(struct sockaddr*)&clientAddr,&clientAddrLen);      
                             }
                            ReceiveData(clientSocket);    
                   }   

                   closesocket(serverSocket);
                   closesocket(clientSocket);

                  
return 0;
}

//Receive the data
void ReceiveData(SOCKET& clientSocket)
{    
            
int bytesSent;
            
int bytesRecv=SOCKET_ERROR;
            
string sendbuf="";
            
char recvbuf[32]="";
    
            
while(bytesRecv ==SOCKET_ERROR)
             {
                       bytesRecv
=recv(clientSocket,recvbuf,32,0);
    
                        sendbuf
="Received: "+(string)recvbuf;
                        bytesSent
=send(clientSocket,sendbuf.c_str(),(unsigned int)(sendbuf.size()),0);

                        bytesRecv
=SOCKET_ERROR;
                        memset(recvbuf,
'\0',32);
             }
            return;
}

          鍦ㄦ帴鏀跺鎴風鍙戞潵鏁版嵁鐨勫湴鏂硅鍋氭垚姝誨驚鐜紝濡傛灉闇瑕佹柇寮榪炴帴錛屽垯鐢卞鎴鋒柇鍙戦佺壒瀹氱殑娑堟伅鐒跺悗榪涜澶勭悊銆傝繕鏈夐渶瑕佹敞鎰忕殑鏄笂闈㈢殑HostIp鏄湰鏈虹殑IP鍦板潃錛孭ORT鏄鎺ュ瓧闇瑕佺粦瀹氱殑绔彛銆?/p>

]]>
鍦╲c涓氳繃榪炴帴姹犳搷浣渕ysql(api鏂瑰紡)錛岄檮c++璁塊棶mysql鐨勫皝瑁呯被http://m.shnenglu.com/aurain/archive/2008/02/21/43049.html姘?/dc:creator>姘?/author>Thu, 21 Feb 2008 07:10:00 GMThttp://m.shnenglu.com/aurain/archive/2008/02/21/43049.htmlhttp://m.shnenglu.com/aurain/comments/43049.htmlhttp://m.shnenglu.com/aurain/archive/2008/02/21/43049.html#Feedback1http://m.shnenglu.com/aurain/comments/commentRss/43049.htmlhttp://m.shnenglu.com/aurain/services/trackbacks/43049.html鍦ㄦ湁澶ч噺鑺傜偣璁塊棶鐨勬暟鎹簱璁捐涓?緇忓父瑕佷嬌鐢ㄥ埌榪炴帴姹犳潵綆$悊鎵鏈夌殑榪炴帴.
涓鑸柟娉曟槸:寤虹珛涓や釜榪炴帴鍙ユ焺闃熷垪,絀洪棽鐨勭瓑寰呬嬌鐢ㄧ殑闃熷垪鍜屾鍦ㄤ嬌鐢ㄧ殑闃熷垪.
褰撹鏌ヨ鏃跺厛浠庣┖闂查槦鍒椾腑鑾峰彇涓涓彞鏌?鎻掑叆鍒版鍦ㄤ嬌鐢ㄧ殑闃熷垪,鍐嶇敤榪欎釜鍙ユ焺鍋氭暟鎹簱鎿嶄綔,瀹屾瘯鍚庝竴瀹氳浠庝嬌鐢ㄩ槦鍒椾腑鍒犻櫎,鍐嶆彃鍏ュ埌絀洪棽闃熷垪.
浠g爜濡備笅錛?br>MySQLMan.h
 // MySQLMan.h: interface for the CMySQLMan class.
//
//////////////////////////////////////////////////////////////////////
#include <mysql.h>
#pragma comment(lib,"libmySQL.lib")

#include <list>

typedef std::list<MYSQL *> CONNECTION_HANDLE_LIST;
typedef std::list<MYSQL *>::iterator ITER_CONNECTION_HANDLE_LIST;

#define CONNECTION_NUM 10 //鍚屾椂鎵撳紑鐨勮繛鎺ユ暟

class CMySQLMan 
{
public:
 CMySQLMan();
 CMySQLMan(const char *host, const char *user, const char *password, const char *db, unsigned int port=3306);
 virtual ~CMySQLMan();
 
public:
 bool ConnectDB();      //榪炴帴鏁版嵁搴?br> MYSQL_RES* SelectRecord(const char *szSql); //閫夋嫨璁板綍錛岃繑鍥炵粨鏋滈泦
 bool SelectDB(const char *szDB);  //閫夋嫨鏁版嵁搴?br> bool UpdateRecord(const char *szSql); //鏇存柊璁板綍
 bool InsertRecord(const char *szSql); //鎻掑叆璁板綍
 bool DelRecord(const char *szSql);  //鍒犻櫎璁板綍

 BOOL IsEnd(MYSQL_RES *myquery);       //鏄惁鏈鍚?br> void SeekData(MYSQL_RES *myquery, int offset);    //鏌ユ壘鎸囧畾鏁版嵁
 void FreeRecord(MYSQL_RES *myquery);      //閲婃斁緇撴灉闆?br> unsigned int GetFieldNum(MYSQL_RES *myquery);    //寰楀埌瀛楁鏁?br> MYSQL_ROW GetRecord(MYSQL_RES *myquery);     //寰楀埌緇撴灉錛堜竴涓褰曪級
 my_ulonglong GetRowNum(MYSQL_RES *myquery);    //寰楀埌璁板綍鏁?br> char* OutErrors(MYSQL* pMySql);      //杈撳嚭閿欒淇℃伅

 char* GetState();      //鏈嶅姟鍣ㄧ姸鎬?br> char* GetServerInfo();     //鏈嶅姟鍣ㄤ俊鎭?br> int GetProtocolInfo();     //鍗忚淇℃伅
 char* GetHostInfo();     //涓繪満淇℃伅
 char* GetClientInfo();     //瀹㈡埛鏈轟俊鎭?br> char* GetFieldName(MYSQL_RES *myquery, int FieldNum);  //瀛楁鍚?/p>

 bool LockTable(const char *TableName, const char *Priority); //瀵圭壒瀹氳〃鍔犻攣
 bool UnlockTable();      //瑙i攣
 bool SetCharset();
 //int CreateDB(char *db);    //鍒涘緩鏁版嵁搴擄紝榪斿洖閿欒淇℃伅
 //int DropDB(char *db);     //鍒犻櫎鏁版嵁搴?榪斿洖閿欒淇℃伅

 MYSQL* GetIdleMySql();     //鎻愬彇涓涓┖闂插彞鏌勪緵浣跨敤
 void SetIdleMysql(MYSQL* pMySql);  //浠庝嬌鐢ㄩ槦鍒椾腑閲婃斁涓涓嬌鐢ㄥ畬姣曠殑鍙ユ焺錛屾彃鍏ュ埌絀洪棽闃熷垪

public:
 //MYSQL  m_mysql;      //鏁版嵁搴撹繛鎺ュ彞鏌?br> MYSQL_ROW m_row;       //璁板綍闆?鍗曡)
 MYSQL_FIELD *m_field;      //瀛楁淇℃伅錛堢粨鏋勪綋錛?/p>

 //鍒涘緩涓や釜闃熷垪
 CONNECTION_HANDLE_LIST m_lsBusyList;                //姝e湪浣跨敤鐨勮繛鎺ュ彞鏌?br> CONNECTION_HANDLE_LIST m_lsIdleList;                //鏈嬌鐢ㄧ殑榪炴帴鍙ユ焺

 CRITICAL_SECTION m_csList;

public:
 char m_host[20];   //涓繪満
 char m_user[20];   //鐢ㄦ埛鍚?br> char m_password[20];  //瀵嗙爜
 char m_db[20];    //鏁版嵁搴撳悕
 unsigned int m_port;  //绔彛
};

MySQLMan.cpp
// MySQLMan.cpp: implementation of the MySQLMan class.
//
//////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "MySQLMan.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMySQLMan::CMySQLMan()
{
 
}

CMySQLMan::CMySQLMan(const char *host, const char *user, const char *password, const char *db, unsigned int port/* =3306 */)
{
 strcpy(m_host, host);
 strcpy(m_user, user);
 strcpy(m_password, password);
 strcpy(m_db, db);
 m_port = port;

 InitializeCriticalSection(&m_csList);
}

CMySQLMan::~CMySQLMan()
{
 for (ITER_CONNECTION_HANDLE_LIST iter=m_lsBusyList.begin(); iter != m_lsBusyList.end(); iter++)
 {
  mysql_close((*iter));
 }

 for (ITER_CONNECTION_HANDLE_LIST iter=m_lsIdleList.begin(); iter != m_lsIdleList.end(); iter++)
 {
  mysql_close((*iter));
 }

 DeleteCriticalSection(&m_csList);
}

bool CMySQLMan::ConnectDB()
{
 //鍚屾椂鎵撳紑CONNECTION_NUM涓繛鎺?br> try
 {
  for (int i=0; i<CONNECTION_NUM; ++i)
  {
   MYSQL *pMySql = mysql_init((MYSQL*)NULL);
   if (pMySql != NULL)
   {
    if (!mysql_real_connect(pMySql,m_host,m_user,m_password,m_db,m_port,NULL,0))
    {
     OutErrors(pMySql);
     return false;
    }
    m_lsIdleList.push_back(pMySql);
   }
  }
 }
 catch (...)
 {
  return false;
 }
 return true;
}

MYSQL* CMySQLMan::GetIdleMySql()
{
 MYSQL* pMySql = NULL;
 EnterCriticalSection(&m_csList);
 if (m_lsIdleList.size() > 0)
 {
  pMySql = m_lsIdleList.front();
  m_lsIdleList.pop_front();
  m_lsBusyList.push_back(pMySql);
 }
 else
 {
  pMySql = NULL;
 }
 LeaveCriticalSection(&m_csList);

 return pMySql;
}

void CMySQLMan::SetIdleMysql(MYSQL* pMySql)
{
 EnterCriticalSection(&m_csList);
 m_lsBusyList.remove(pMySql);
 m_lsIdleList.push_back(pMySql);
 LeaveCriticalSection(&m_csList);
}

MYSQL_RES* CMySQLMan::SelectRecord(const char *szSql)
{
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return NULL;
 }
 if(mysql_query(pMySql,szSql))
  return NULL;
 MYSQL_RES *myquery = NULL;
 myquery = mysql_store_result(pMySql);
 SetIdleMysql(pMySql);

 return myquery;
}

bool CMySQLMan::InsertRecord(const char *szSql)
{
 bool bRet = false;
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return false;
 }
 if(mysql_query(pMySql,szSql))
 {
  bRet = true;
 }
 SetIdleMysql(pMySql);

 return bRet;
}

bool CMySQLMan::UpdateRecord(const char *szSql)
{
 bool bRet = false;
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return false;
 }
 if(mysql_query(pMySql,szSql))
 {
  bRet = true;
 }
 SetIdleMysql(pMySql);

 return bRet;
}

bool CMySQLMan::DelRecord(const char *szSql)
{
 bool bRet = false;
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return false;
 }
 if(mysql_query(pMySql,szSql))
 {
  bRet = true;
 }
 SetIdleMysql(pMySql);

 return bRet;
}

bool CMySQLMan::SelectDB(const char *szDB)
{
 bool bRet = false;
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return false;
 }
 if (mysql_select_db(pMySql,szDB))
  bRet = false; 
 else
  bRet = true;
 SetIdleMysql(pMySql);

 return bRet;
}

my_ulonglong CMySQLMan::GetRowNum(MYSQL_RES *myquery)
{
 return mysql_num_rows(myquery);
}

MYSQL_ROW CMySQLMan::GetRecord(MYSQL_RES *myquery)
{
 m_row = mysql_fetch_row(myquery);

 return m_row;
}

unsigned int CMySQLMan::GetFieldNum(MYSQL_RES *myquery)
{
 return mysql_num_fields(myquery);
}

void CMySQLMan::FreeRecord(MYSQL_RES *myquery)
{
 mysql_free_result(myquery);
}

//int CMySQLMan::CreateDB(char *db)
//{
// return mysql_create_db(&m_mysql,db);
//}

void CMySQLMan::SeekData(MYSQL_RES *myquery, int offset)
{
 mysql_data_seek(myquery,offset);
}


char * CMySQLMan::OutErrors(MYSQL *pMySql)
{
 return const_cast<char *>(mysql_error(pMySql));
}

BOOL CMySQLMan::IsEnd(MYSQL_RES *myquery)
{
 return mysql_eof(myquery);
}

char* CMySQLMan::GetFieldName(MYSQL_RES *myquery, int FieldNum)
{
 m_field = mysql_fetch_field_direct(myquery, FieldNum);

 return m_field->name;
}

char * CMySQLMan::GetClientInfo()
{
 return const_cast<char *>(mysql_get_client_info());
}

char* CMySQLMan::GetHostInfo()
{
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return NULL;
 }
 return const_cast<char *>(mysql_get_host_info(pMySql));
}

int CMySQLMan::GetProtocolInfo()
{
 int iRet = 0;
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return NULL;
 }
 iRet = mysql_get_proto_info(pMySql);
 SetIdleMysql(pMySql);

 return iRet;
}

char* CMySQLMan::GetServerInfo()
{
 static char szRet[1024];
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return NULL;
 }
 _tcscpy(szRet, const_cast<char *>(mysql_get_server_info(pMySql)));
 SetIdleMysql(pMySql);

 return szRet;
}

char* CMySQLMan::GetState()
{
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return NULL;
 }
 static char szRet[1024];
 _tcscpy(szRet,const_cast<char *>(mysql_stat(pMySql)));
 SetIdleMysql(pMySql);

 return szRet;
}

bool CMySQLMan::SetCharset()
{
 bool bRet = false;
 char szSql[50];
 strcpy(szSql, "set names gb2312");
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return false;
 }
 if (mysql_query(pMySql, szSql))
  bRet = true;
 SetIdleMysql(pMySql);

 return bRet;
}

//LOCK TABLES tbl1 READ, tbl2 WRITE
bool CMySQLMan::LockTable(const char *TableName, const char *Priority)
{
 bool bRet = false;
 char szSql[50];
 sprintf(szSql, "LOCK TABLES %s %s", TableName, Priority);
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return false;
 }
 if (mysql_query(pMySql, szSql))
  bRet = true;
 SetIdleMysql(pMySql);

 return bRet;
}

bool CMySQLMan::UnlockTable()
{
 bool bRet = false;
 MYSQL *pMySql = GetIdleMySql();
 if (pMySql == NULL)
 {
  return false;
 }
 if(mysql_query(pMySql,"UNLOCK TABLES"))
  bRet = true;
 SetIdleMysql(pMySql);

 return bRet;

}

 



]]>
緗戠粶瀛楄妭搴忎笌涓繪満瀛楄妭搴?/title><link>http://m.shnenglu.com/aurain/archive/2008/02/18/42865.html</link><dc:creator>姘?/dc:creator><author>姘?/author><pubDate>Mon, 18 Feb 2008 03:17:00 GMT</pubDate><guid>http://m.shnenglu.com/aurain/archive/2008/02/18/42865.html</guid><wfw:comment>http://m.shnenglu.com/aurain/comments/42865.html</wfw:comment><comments>http://m.shnenglu.com/aurain/archive/2008/02/18/42865.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/aurain/comments/commentRss/42865.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/aurain/services/trackbacks/42865.html</trackback:ping><description><![CDATA[涓嶅悓鐨凜PU鏈変笉鍚岀殑瀛楄妭搴忕被鍨?nbsp;榪欎簺瀛楄妭搴忔槸鎸囨暣鏁板湪鍐呭瓨涓繚瀛樼殑欏哄簭 榪欎釜鍙仛涓繪満搴?nbsp;<br>鏈甯歌鐨勬湁涓ょ<br>1錛?nbsp;Little endian錛氬皢浣庡簭瀛楄妭瀛樺偍鍦ㄨ搗濮嬪湴鍧<br>2錛?nbsp;Big endian錛氬皢楂樺簭瀛楄妭瀛樺偍鍦ㄨ搗濮嬪湴鍧<br><br>LE little-endian <br>鏈絎﹀悎浜虹殑鎬濈淮鐨勫瓧鑺傚簭 <br>鍦板潃浣庝綅瀛樺偍鍊肩殑浣庝綅 <br>鍦板潃楂樹綅瀛樺偍鍊肩殑楂樹綅 <br>鎬庝箞璁叉槸鏈絎﹀悎浜虹殑鎬濈淮鐨勫瓧鑺傚簭錛屾槸鍥犱負浠庝漢鐨勭涓瑙傛劅鏉ヨ <br>浣庝綅鍊煎皬錛屽氨搴旇鏀懼湪鍐呭瓨鍦板潃灝忕殑鍦版柟錛屼篃鍗沖唴瀛樺湴鍧浣庝綅 <br>鍙嶄箣錛岄珮浣嶅煎氨搴旇鏀懼湪鍐呭瓨鍦板潃澶х殑鍦版柟錛屼篃鍗沖唴瀛樺湴鍧楂樹綅 <br><br>BE big-endian <br>鏈鐩磋鐨勫瓧鑺傚簭 <br>鍦板潃浣庝綅瀛樺偍鍊肩殑楂樹綅 <br>鍦板潃楂樹綅瀛樺偍鍊肩殑浣庝綅 <br>涓轟粈涔堣鐩磋錛屼笉瑕佽冭檻瀵瑰簲鍏崇郴 <br>鍙渶瑕佹妸鍐呭瓨鍦板潃浠庡乏鍒板彸鎸夌収鐢變綆鍒伴珮鐨勯『搴忓啓鍑?nbsp;<br>鎶婂兼寜鐓ч氬父鐨勯珮浣嶅埌浣庝綅鐨勯『搴忓啓鍑?nbsp;<br>涓よ呭鐓э紝涓涓瓧鑺備竴涓瓧鑺傜殑濉厖榪涘幓 <br><br>渚嬪瓙錛氬湪鍐呭瓨涓弻瀛?x01020304(DWORD)鐨勫瓨鍌ㄦ柟寮?nbsp;<br><br>鍐呭瓨鍦板潃 <br>4000 4001 4002 4003 <br>LE 04 03 02 01 <br>BE 01 02 03 04 <br><br>渚嬪瓙錛氬鏋滄垜浠皢0x1234abcd鍐欏叆鍒頒互0x0000寮濮嬬殑鍐呭瓨涓紝鍒欑粨鏋滀負<br>      big-endian  little-endian<br>0x0000  0x12      0xcd<br>0x0001  0x23      0xab<br>0x0002  0xab      0x34<br>0x0003  0xcd      0x12<br>x86緋誨垪CPU閮芥槸little-endian鐨勫瓧鑺傚簭. <br><br>緗戠粶瀛楄妭欏哄簭鏄疶CP/IP涓瀹氬ソ鐨勪竴縐嶆暟鎹〃紺烘牸寮忥紝瀹冧笌鍏蜂綋鐨凜PU綾誨瀷銆佹搷浣滅郴緇熺瓑鏃犲叧錛屼粠鑰屽彲浠ヤ繚璇佹暟鎹湪涓嶅悓涓繪満涔嬮棿浼犺緭鏃惰兘澶熻姝g‘瑙i噴銆傜綉緇滃瓧鑺傞『搴忛噰鐢╞ig endian鎺掑簭鏂瑰紡銆?br><br>涓轟簡榪涜杞崲 bsd socket鎻愪緵浜嗚漿鎹㈢殑鍑芥暟 鏈変笅闈㈠洓涓?br>htons 鎶妘nsigned short綾誨瀷浠庝富鏈哄簭杞崲鍒扮綉緇滃簭<br>htonl 鎶妘nsigned long綾誨瀷浠庝富鏈哄簭杞崲鍒扮綉緇滃簭<br>ntohs 鎶妘nsigned short綾誨瀷浠庣綉緇滃簭杞崲鍒頒富鏈哄簭<br>ntohl 鎶妘nsigned long綾誨瀷浠庣綉緇滃簭杞崲鍒頒富鏈哄簭<br><br>鍦ㄤ嬌鐢╨ittle endian鐨勭郴緇熶腑 榪欎簺鍑芥暟浼氭妸瀛楄妭搴忚繘琛岃漿鎹?nbsp;<br>鍦ㄤ嬌鐢╞ig endian綾誨瀷鐨勭郴緇熶腑 榪欎簺鍑芥暟浼氬畾涔夋垚絀哄畯<br><br>鍚屾牱 鍦ㄧ綉緇滅▼搴忓紑鍙戞椂 鎴栨槸璺ㄥ鉤鍙板紑鍙戞椂 涔熷簲璇ユ敞鎰忎繚璇佸彧鐢ㄤ竴縐嶅瓧鑺傚簭 涓嶇劧涓ゆ柟鐨勮В閲婁笉涓鏍峰氨浼氫駭鐢焍ug.<br><br>娉細<br>1銆佺綉緇滀笌涓繪満瀛楄妭杞崲鍑芥暟:htons ntohs htonl ntohl (s 灝辨槸short l鏄痩ong h鏄痟ost n鏄痭etwork)<br>2銆佷笉鍚岀殑CPU涓婅繍琛屼笉鍚岀殑鎿嶄綔緋葷粺錛屽瓧鑺傚簭涔熸槸涓嶅悓鐨勶紝鍙傝涓嬭〃銆?br>澶勭悊鍣?nbsp;   鎿嶄綔緋葷粺    瀛楄妭鎺掑簭<br>Alpha    鍏ㄩ儴    Little endian<br>HP-PA    NT    Little endian<br>HP-PA    UNIX    Big endian<br>Intelx86    鍏ㄩ儴    Little endian <-----x86緋葷粺鏄皬绔瓧鑺傚簭緋葷粺<br>Motorola680x()    鍏ㄩ儴    Big endian<br>MIPS    NT    Little endian<br>MIPS    UNIX    Big endian<br>PowerPC    NT    Little endian<br>PowerPC    闈濶T    Big endian  <-----PPC緋葷粺鏄ぇ绔瓧鑺傚簭緋葷粺<br>RS/6000    UNIX    Big endian<br>SPARC    UNIX    Big endian<br>IXP1200 ARM鏍稿績    鍏ㄩ儴    Little endian <br><br> <p>涓嬮潰鏄竴涓楠屾湰鏈哄瓧鑺傚簭鐨勭畝渚挎柟娉曪細</p> <p>//鍒ゆ柇鏈満鐨勫瓧鑺傚簭<br>//榪斿洖true琛ㄤ負灝忔搴忋傝繑鍥瀎alse琛ㄧず涓哄ぇ孌靛簭<br><font color=#0000ff>bool am_little_endian ()<br>{<br> unsigned short i=1;<br> return (int)*((char *)(&i)) ? true : false;<br>}<br>int main()<br>{<br>  if(am_little_endian())<br> {<br>           printf("鏈満瀛楄妭搴忎負灝忔搴?\n");<br> }<br> else<br> {<br>          printf("鏈満瀛楄妭搴忎負澶ф搴?\n");<br> }<br>        return 0;<br>}</font></p> <img src ="http://m.shnenglu.com/aurain/aggbug/42865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/aurain/" target="_blank">姘?/a> 2008-02-18 11:17 <a href="http://m.shnenglu.com/aurain/archive/2008/02/18/42865.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Linux緋葷粺鐜涓嬬殑Socket緙栫▼璇︾粏瑙f瀽http://m.shnenglu.com/aurain/archive/2008/01/18/socket.html姘?/dc:creator>姘?/author>Fri, 18 Jan 2008 01:41:00 GMThttp://m.shnenglu.com/aurain/archive/2008/01/18/socket.htmlhttp://m.shnenglu.com/aurain/comments/41397.htmlhttp://m.shnenglu.com/aurain/archive/2008/01/18/socket.html#Feedback0http://m.shnenglu.com/aurain/comments/commentRss/41397.htmlhttp://m.shnenglu.com/aurain/services/trackbacks/41397.html浠涔堟槸Socket

銆銆Socket鎺ュ彛鏄?span>TCP/IP緗戠粶鐨?span>API錛?span>Socket鎺ュ彛瀹氫箟浜嗚澶氬嚱鏁版垨渚嬬▼錛岀▼搴忓憳鍙互鐢ㄥ畠浠潵寮鍙?span>TCP/IP緗戠粶涓婄殑搴旂敤紼嬪簭銆傝瀛?span>Internet涓婄殑TCP/IP緗戠粶緙栫▼錛屽繀欏葷悊瑙?span>Socket鎺ュ彛銆?span>

銆銆Socket鎺ュ彛璁捐鑰呮渶鍏堟槸灝嗘帴鍙f斁鍦?span>Unix鎿嶄綔緋葷粺閲岄潰鐨勩傚鏋滀簡瑙?span>Unix緋葷粺鐨勮緭鍏ュ拰杈撳嚭鐨勮瘽錛屽氨寰堝鏄撲簡瑙?span>Socket浜嗐傜綉緇滅殑Socket鏁版嵁浼犺緭鏄竴縐嶇壒孌婄殑I/O錛?span>Socket涔熸槸涓縐嶆枃浠舵弿榪扮銆?span>Socket涔熷叿鏈変竴涓被浼間簬鎵撳紑鏂囦歡鐨勫嚱鏁拌皟鐢?span>Socket()錛岃鍑芥暟榪斿洖涓涓暣鍨嬬殑Socket鎻忚堪絎︼紝闅忓悗鐨勮繛鎺ュ緩绔嬨佹暟鎹紶杈撶瓑鎿嶄綔閮芥槸閫氳繃璇?span>Socket瀹炵幇鐨勩傚父鐢ㄧ殑Socket綾誨瀷鏈変袱縐嶏細嫻佸紡Socket錛?span>SOCK_STREAM錛夊拰鏁版嵁鎶ュ紡Socket錛?span>SOCK_DGRAM錛夈傛祦寮忔槸涓縐嶉潰鍚戣繛鎺ョ殑Socket錛岄拡瀵逛簬闈㈠悜榪炴帴鐨?span>TCP鏈嶅姟搴旂敤錛涙暟鎹姤寮?span>Socket鏄竴縐嶆棤榪炴帴鐨?span>Socket錛屽搴斾簬鏃犺繛鎺ョ殑UDP鏈嶅姟搴旂敤銆?span>

銆銆Socket寤虹珛

銆銆涓轟簡寤虹珛Socket錛岀▼搴忓彲浠ヨ皟鐢?span>socket鍑芥暟錛岃鍑芥暟榪斿洖涓涓被浼間簬鏂囦歡鎻忚堪絎︾殑鍙ユ焺銆?span>socket鍑芥暟鍘熷瀷涓猴細

銆銆int socket(int domain, int type, int protocol);

銆銆domain鎸囨槑鎵浣跨敤鐨?span>鍗忚鏃忥紝閫氬父涓?span>AF_INET錛岃〃紺?span>浜掕仈緗?/span>鍗忚鏃忥紙TCP/IP鍗忚鏃忥級錛?span>type鍙傛暟鎸囧畾socket鐨勭被鍨嬶細SOCK_STREAM 鎴?span>SOCK_DGRAM錛?span>Socket鎺ュ彛榪樺畾涔変簡鍘熷Socket錛?span>SOCK_RAW錛夛紝鍏佽紼嬪簭浣跨敤浣庡眰鍗忚錛?span>protocol閫氬父璧嬪?span>"0"錛堣〃紺烘牴鎹?span>type鏉ヨ嚜鍔ㄩ夋嫨鍗忚錛夈?span>socket()璋冪敤榪斿洖涓涓暣鍨?span>socket鎻忚堪絎︼紝浣犲彲浠ュ湪鍚庨潰鐨勮皟鐢ㄤ嬌鐢ㄥ畠銆?/span>

銆銆Socket鎻忚堪絎︽槸涓涓寚鍚戝唴閮ㄦ暟鎹粨鏋勭殑鎸囬拡錛屽畠鎸囧悜鎻忚堪絎﹁〃鍏ュ彛銆傝皟鐢?span>Socket鍑芥暟鏃訛紝socket鎵ц浣撳皢寤虹珛涓涓?span>Socket錛屽疄闄呬笂"寤虹珛涓涓?span>Socket"鎰忓懗鐫涓轟竴涓?span>Socket鏁版嵁緇撴瀯鍒嗛厤瀛樺偍絀洪棿銆?span>Socket鎵ц浣撲負浣犵鐞嗘弿榪扮琛ㄣ?/span>

銆銆涓や釜緗戠粶紼嬪簭涔嬮棿鐨勪竴涓綉緇滆繛鎺ュ寘鎷簲縐嶄俊鎭細閫氫俊鍗忚銆佹湰鍦板崗璁湴鍧銆佹湰鍦頒富鏈虹鍙c佽繙绔富鏈哄湴鍧鍜岃繙绔崗璁鍙c?span>Socket鏁版嵁緇撴瀯涓寘鍚繖浜旂淇℃伅銆?span>

銆銆Socket閰嶇疆

銆銆閫氳繃socket鍑芥暟璋冪敤榪斿洖涓涓?span>socket鎻忚堪絎﹀悗錛屽湪浣跨敤socket榪涜緗戠粶浼犺緭浠ュ墠錛屽繀欏婚厤緗socket銆傞潰鍚戣繛鎺ョ殑socket瀹㈡埛绔氳繃璋冪敤connect鍑芥暟鍦?span>socket鏁版嵁緇撴瀯涓繚瀛樻湰鍦板拰榪滅淇℃伅銆傛棤榪炴帴socket鐨勫鎴風鍜屾湇鍔$浠ュ強闈㈠悜榪炴帴socket鐨勬湇鍔$閫氳繃璋冪敤bind鍑芥暟鏉ラ厤緗湰鍦頒俊鎭?span>
bind鍑芥暟灝?span>socket涓庢湰鏈轟笂鐨勪竴涓鍙g浉鍏寵仈錛岄殢鍚庝綘灝卞彲浠ュ湪璇ョ鍙g洃鍚湇鍔¤姹傘?span>bind鍑芥暟鍘熷瀷涓猴細

銆銆

int bind(int sockfd,struct sockaddr *my_addr, int addrlen);
sockfd
鏄皟鐢?span>socket鍑芥暟榪斿洖鐨?span>socket鎻忚堪絎?span>,

my_addr鏄竴涓寚鍚戝寘鍚湁鏈満IP鍦板潃鍙婄鍙e彿絳変俊鎭殑sockaddr綾誨瀷鐨勬寚閽堬紱

addrlen甯歌璁劇疆涓?span>sizeof(struct sockaddr)銆?span>
銆銆struct sockaddr緇撴瀯綾誨瀷鏄敤鏉ヤ繚瀛?span>socket淇℃伅鐨勶細
銆銆struct sockaddr {
銆銆 unsigned short sa_family; /* 鍦板潃鏃忥紝 AF_xxx */
char sa_data[14]; /* 14
瀛楄妭鐨勫崗璁湴鍧 */
};
銆銆sa_family涓鑸負AF_INET錛屼唬琛?span>Internet錛?span>TCP/IP錛夊湴鍧鏃忥紱sa_data
鍒欏寘鍚socket鐨?span>IP鍦板潃鍜岀鍙e彿銆?span>
銆銆鍙﹀榪樻湁涓縐嶇粨鏋勭被鍨嬶細
銆銆struct sockaddr_in {
銆銆 short int sin_family; /* 鍦板潃鏃?span> */
銆銆 unsigned short int sin_port; /* 绔彛鍙?span> */
銆銆 struct in_addr sin_addr; /* IP鍦板潃 */
銆銆 unsigned char sin_zero[8]; /* 濉厖0 浠ヤ繚鎸佷笌struct sockaddr鍚屾牱澶у皬 */
銆銆};

銆銆榪欎釜緇撴瀯鏇存柟渚夸嬌鐢ㄣ?span>sin_zero鐢ㄦ潵灝?span>sockaddr_in緇撴瀯濉厖鍒頒笌struct sockaddr鍚屾牱鐨勯暱搴︼紝鍙互鐢?span>bzero()鎴?span>memset()鍑芥暟灝嗗叾緗負闆躲傛寚鍚?span>sockaddr_in 鐨勬寚閽堝拰鎸囧悜sockaddr鐨勬寚閽堝彲浠ョ浉浜掕漿鎹紝榪欐剰鍛崇潃濡傛灉涓涓嚱鏁版墍闇鍙傛暟綾誨瀷鏄?span>sockaddr鏃訛紝浣犲彲浠ュ湪鍑芥暟璋冪敤鐨勬椂鍊欏皢涓涓寚鍚?span>sockaddr_in鐨勬寚閽堣漿鎹負鎸囧悜sockaddr鐨勬寚閽堬紱鎴栬呯浉鍙嶃?span>

銆銆浣跨敤bind鍑芥暟鏃訛紝鍙互鐢ㄤ笅闈㈢殑璧嬪煎疄鐜拌嚜鍔ㄨ幏寰楁湰鏈?span>IP鍦板潃鍜岄殢鏈鴻幏鍙栦竴涓病鏈夎鍗犵敤鐨勭鍙e彿錛?span>

銆銆my_addr.sin_port = 0; /* 緋葷粺闅忔満閫夋嫨涓涓湭琚嬌鐢ㄧ殑绔彛鍙?span> */
銆銆my_addr.sin_addr.s_addr = INADDR_ANY; /* 濉叆鏈満IP鍦板潃 */
閫氳繃灝?span>my_addr.sin_port緗負0錛屽嚱鏁頒細鑷姩涓轟綘閫夋嫨涓涓湭鍗犵敤鐨勭鍙f潵浣跨敤銆傚悓鏍鳳紝閫氳繃灝?span>my_addr.sin_addr.s_addr緗負INADDR_ANY錛岀郴緇熶細鑷姩濉叆鏈満IP鍦板潃銆?/span>

銆銆娉ㄦ剰鍦ㄤ嬌鐢?span>bind鍑芥暟鏄渶瑕佸皢sin_port鍜?span>sin_addr杞崲鎴愪負緗戠粶瀛楄妭浼樺厛欏哄簭錛涜?span>sin_family鍒欎笉闇瑕佽漿鎹€?/span>

銆銆璁$畻鏈烘暟鎹?span>瀛樺偍鏈変袱縐嶅瓧鑺備紭鍏堥『搴忥細楂樹綅瀛楄妭浼樺厛鍜屼綆浣嶅瓧鑺備紭鍏堛?span>Internet涓婃暟鎹互楂樹綅瀛楄妭浼樺厛欏哄簭鍦ㄧ綉緇滀笂浼犺緭錛屾墍浠ュ浜庡湪鍐呴儴鏄互浣庝綅瀛楄妭浼樺厛鏂瑰紡瀛樺偍鏁版嵁鐨勬満鍣紝鍦?span>Internet涓婁紶杈撴暟鎹椂灝遍渶瑕佽繘琛岃漿鎹紝鍚﹀垯灝變細鍑虹幇鏁版嵁涓嶄竴鑷淬?/span>

銆銆涓嬮潰鏄嚑涓瓧鑺傞『搴忚漿鎹㈠嚱鏁幫細

·htonl()錛氭妸32浣嶅間粠涓繪満瀛楄妭搴忚漿鎹㈡垚緗戠粶瀛楄妭搴?span>
·htons()
錛氭妸16浣嶅間粠涓繪満瀛楄妭搴忚漿鎹㈡垚緗戠粶瀛楄妭搴?span>
·ntohl()錛氭妸32浣嶅間粠緗戠粶瀛楄妭搴忚漿鎹㈡垚涓繪満瀛楄妭搴?span>
·ntohs()錛氭妸16浣嶅間粠緗戠粶瀛楄妭搴忚漿鎹㈡垚涓繪満瀛楄妭搴?span>

銆銆bind()鍑芥暟鍦ㄦ垚鍔熻璋冪敤鏃惰繑鍥?span>0錛涘嚭鐜伴敊璇椂榪斿洖"-1"騫跺皢errno緗負鐩稿簲鐨勯敊璇彿銆傞渶瑕佹敞鎰忕殑鏄紝鍦ㄨ皟鐢?span>bind鍑芥暟鏃朵竴鑸笉瑕佸皢绔彛鍙風疆涓哄皬浜?span>1024鐨勫鹼紝鍥犱負1鍒?span>1024鏄繚鐣欑鍙e彿錛屼綘鍙互閫夋嫨澶т簬1024涓殑浠諱綍涓涓病鏈夎鍗犵敤鐨勭鍙e彿銆?/span>

榪炴帴寤虹珛

闈㈠悜榪炴帴鐨勫鎴風▼搴忎嬌鐢?span>connect鍑芥暟鏉ラ厤緗?span>socket騫朵笌榪滅鏈嶅姟鍣?/span>寤虹珛涓涓?span>TCP榪炴帴錛屽叾鍑芥暟鍘熷瀷涓猴細

int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
sockfd
鏄?span>socket鍑芥暟榪斿洖鐨?span>socket鎻忚堪絎︼紱serv_addr鏄寘鍚繙绔富鏈?span>IP鍦板潃鍜岀鍙g殑鎸囬拡錛?span>addrlen鏄繙绔湴鍧緇撴瀯鐨勯暱搴?span>(sizeof(struct sockaddr))銆?span>connect鍑芥暟鍦ㄥ嚭鐜伴敊璇椂榪斿洖-1錛屽茍涓旇緗?span>errno涓虹浉搴旂殑閿欒鐮併傝繘琛屽鎴風紼嬪簭璁捐鏃犻』璋冪敤bind()錛屽洜涓鴻繖縐嶆儏鍐典笅鍙渶鐭ラ亾鐩殑鏈哄櫒鐨?span>IP鍦板潃錛岃屽鎴烽氳繃鍝釜绔彛涓?span>鏈嶅姟鍣?/span>寤虹珛榪炴帴騫朵笉闇瑕佸叧蹇冿紝socket鎵ц浣撲負浣犵殑紼嬪簭鑷姩閫夋嫨涓涓湭琚崰鐢ㄧ殑绔彛錛屽茍閫氱煡浣犵殑紼嬪簭鏁版嵁浠涔堟椂鍊欏埌鎵撴柇鍙c?/span>

銆銆connect鍑芥暟鍚姩鍜岃繙绔富鏈虹殑鐩存帴榪炴帴銆傚彧鏈夐潰鍚戣繛鎺ョ殑瀹㈡埛紼嬪簭浣跨敤socket鏃舵墠闇瑕佸皢姝?span>socket涓庤繙绔富鏈虹浉榪炪傛棤榪炴帴鍗忚浠庝笉寤虹珛鐩存帴榪炴帴銆傞潰鍚戣繛鎺ョ殑鏈嶅姟鍣ㄤ篃浠庝笉鍚姩涓涓繛鎺ワ紝瀹冨彧鏄鍔ㄧ殑鍦ㄥ崗璁鍙g洃鍚鎴風殑璇鋒眰銆?span>

銆銆listen鍑芥暟浣?span>socket澶勪簬琚姩鐨勭洃鍚ā寮忥紝騫朵負璇?span>socket寤虹珛涓涓緭鍏ユ暟鎹槦鍒楋紝灝嗗埌杈劇殑鏈嶅姟璇鋒眰淇濆瓨鍦ㄦ闃熷垪涓紝鐩村埌紼嬪簭澶勭悊瀹冧滑銆?/span>

銆銆int listen(int sockfd錛?span> int backlog);

銆銆sockfd鏄?span>Socket緋葷粺璋冪敤榪斿洖鐨?span>socket 鎻忚堪絎︼紱backlog鎸囧畾鍦ㄨ姹傞槦鍒椾腑鍏佽鐨勬渶澶ц姹傛暟錛岃繘鍏ョ殑榪炴帴璇鋒眰灝嗗湪闃熷垪涓瓑寰?span>accept()瀹冧滑錛堝弬鑰冧笅鏂囷級銆?span>backlog瀵歸槦鍒椾腑絳夊緟鏈嶅姟鐨勮姹傜殑鏁扮洰榪涜浜嗛檺鍒訛紝澶у鏁扮郴緇熺己鐪佸間負20銆傚鏋滀竴涓湇鍔¤姹傚埌鏉ユ椂錛岃緭鍏ラ槦鍒楀凡婊★紝璇?span>socket灝嗘嫆緇濊繛鎺ヨ姹傦紝瀹㈡埛灝嗘敹鍒頒竴涓嚭閿欎俊鎭?/span>

銆銆褰撳嚭鐜伴敊璇椂listen鍑芥暟榪斿洖-1錛屽茍緗浉搴旂殑errno閿欒鐮併?/span>

銆銆accept()鍑芥暟璁╂湇鍔″櫒鎺ユ敹瀹㈡埛鐨勮繛鎺ヨ姹傘傚湪寤虹珛濂借緭鍏ラ槦鍒楀悗錛屾湇鍔″櫒灝辮皟鐢?span>accept鍑芥暟錛岀劧鍚庣潯鐪犲茍絳夊緟瀹㈡埛鐨勮繛鎺ヨ姹傘?/span>

銆銆int accept(int sockfd, void *addr, int *addrlen);

銆銆sockfd鏄鐩戝惉鐨?span>socket鎻忚堪絎︼紝addr閫氬父鏄竴涓寚鍚?span>sockaddr_in鍙橀噺鐨勬寚閽堬紝璇ュ彉閲忕敤鏉ュ瓨鏀炬彁鍑鴻繛鎺ヨ姹傛湇鍔$殑涓繪満鐨勪俊鎭紙鏌愬彴涓繪満浠庢煇涓鍙e彂鍑鴻璇鋒眰錛夛紱addrlen閫氬父涓轟竴涓寚鍚戝間負sizeof(struct sockaddr_in)鐨勬暣鍨嬫寚閽堝彉閲忋傚嚭鐜伴敊璇椂accept鍑芥暟榪斿洖-1騫剁疆鐩稿簲鐨?span>errno鍊箋?/span>

銆銆棣栧厛錛屽綋accept鍑芥暟鐩戣鐨?span>socket鏀跺埌榪炴帴璇鋒眰鏃訛紝socket鎵ц浣撳皢寤虹珛涓涓柊鐨?span>socket錛屾墽琛屼綋灝嗚繖涓柊socket鍜岃姹傝繛鎺ヨ繘紼嬬殑鍦板潃鑱旂郴璧鋒潵錛屾敹鍒版湇鍔¤姹傜殑鍒濆socket浠嶅彲浠ョ戶緇湪浠ュ墠鐨?span> socket涓婄洃鍚紝鍚屾椂鍙互鍦ㄦ柊鐨?span>socket鎻忚堪絎︿笂榪涜鏁版嵁浼犺緭鎿嶄綔銆?span>

銆銆鏁版嵁浼犺緭

銆銆send()鍜?span>recv()榪欎袱涓嚱鏁扮敤浜庨潰鍚戣繛鎺ョ殑socket涓婅繘琛屾暟鎹紶杈撱?span>

銆銆send()鍑芥暟鍘熷瀷涓猴細

銆銆int send(int sockfd, const void *msg, int len, int flags);
sockfd
鏄綘鎯崇敤鏉ヤ紶杈撴暟鎹殑socket鎻忚堪絎︼紱msg鏄竴涓寚鍚戣鍙戦佹暟鎹殑鎸囬拡錛?span>len
鏄互瀛楄妭涓哄崟浣嶇殑鏁版嵁鐨勯暱搴︼紱flags涓鑸儏鍐典笅緗負0錛堝叧浜庤鍙傛暟鐨勭敤娉曞彲鍙傜収man鎵嬪唽錛夈?span>

銆銆send()鍑芥暟榪斿洖瀹為檯涓婂彂閫佸嚭鐨勫瓧鑺傛暟錛屽彲鑳戒細灝戜簬浣犲笇鏈涘彂閫佺殑鏁版嵁銆傚湪紼嬪簭涓簲璇ュ皢send()鐨勮繑鍥炲間笌嬈插彂閫佺殑瀛楄妭鏁拌繘琛屾瘮杈冦傚綋send()榪斿洖鍊間笌len涓嶅尮閰嶆椂錛屽簲璇ュ榪欑鎯呭喌榪涜澶勭悊銆?span>
char *msg = "Hello!";
int len, bytes_sent;
……
len = strlen(msg);
bytes_sent = send(sockfd, msg,len,0);
……
銆銆recv()鍑芥暟鍘熷瀷涓猴細

銆銆int recv(int sockfd,void *buf,int len,unsigned int flags);

銆銆sockfd鏄帴鍙楁暟鎹殑socket鎻忚堪絎︼紱buf 鏄瓨鏀炬帴鏀舵暟鎹殑緙撳啿鍖猴紱len鏄紦鍐茬殑闀垮害銆?span>Flags涔熻緗負0銆?span>recv()榪斿洖瀹為檯涓婃帴鏀剁殑瀛楄妭鏁幫紝褰撳嚭鐜伴敊璇椂錛岃繑鍥?span>-1騫剁疆鐩稿簲鐨?span>errno鍊箋?span>

銆銆sendto()鍜?span>recvfrom()鐢ㄤ簬鍦ㄦ棤榪炴帴鐨勬暟鎹姤socket鏂瑰紡涓嬭繘琛屾暟鎹紶杈撱傜敱浜庢湰鍦?span>socket騫舵病鏈変笌榪滅鏈哄櫒寤虹珛榪炴帴錛屾墍浠ュ湪鍙戦佹暟鎹椂搴旀寚鏄庣洰鐨勫湴鍧銆?span>
銆銆sendto()鍑芥暟鍘熷瀷涓猴細
銆銆int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);

銆銆璇ュ嚱鏁版瘮send()鍑芥暟澶氫簡涓や釜鍙傛暟錛?span>to琛ㄧず鐩湴鏈虹殑IP鍦板潃鍜岀鍙e彿淇℃伅錛岃?span>tolen甯稿父琚祴鍊間負sizeof (struct sockaddr)銆?span>sendto 鍑芥暟涔熻繑鍥炲疄闄呭彂閫佺殑鏁版嵁瀛楄妭闀垮害鎴栧湪鍑虹幇鍙戦侀敊璇椂榪斿洖-1銆?span>

銆銆recvfrom()鍑芥暟鍘熷瀷涓猴細

銆銆int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);

銆銆from鏄竴涓?span>struct sockaddr綾誨瀷鐨勫彉閲忥紝璇ュ彉閲忎繚瀛樻簮鏈虹殑IP鍦板潃鍙婄鍙e彿銆?span>fromlen甯哥疆涓?span>sizeof (struct sockaddr)銆傚綋recvfrom()榪斿洖鏃訛紝fromlen鍖呭惈瀹為檯瀛樺叆from涓殑鏁版嵁瀛楄妭鏁般?span>recvfrom()鍑芥暟榪斿洖鎺ユ敹鍒扮殑瀛楄妭鏁版垨褰撳嚭鐜伴敊璇椂榪斿洖-1錛屽茍緗浉搴旂殑errno銆?span>

銆銆濡傛灉浣犲鏁版嵁鎶?span>socket璋冪敤浜?span>connect()鍑芥暟鏃訛紝浣犱篃鍙互鍒╃敤send()鍜?span>recv()榪涜鏁版嵁浼犺緭錛屼絾璇?span>socket浠嶇劧鏄暟鎹姤socket錛屽茍涓斿埄鐢ㄤ紶杈撳眰鐨?span>UDP鏈嶅姟銆備絾鍦ㄥ彂閫佹垨鎺ユ敹鏁版嵁鎶ユ椂錛屽唴鏍鎬細鑷姩涓轟箣鍔犱笂鐩湴鍜屾簮鍦板潃淇℃伅銆?span>

銆銆緇撴潫浼犺緭

銆銆褰撴墍鏈夌殑鏁版嵁鎿嶄綔緇撴潫浠ュ悗錛屼綘鍙互璋冪敤close()鍑芥暟鏉ラ噴鏀捐socket錛屼粠鑰屽仠姝㈠湪璇?span>socket涓婄殑浠諱綍鏁版嵁鎿嶄綔錛?span>

銆銆close(sockfd);

銆銆浣犱篃鍙互璋冪敤shutdown()鍑芥暟鏉ュ叧闂socket銆傝鍑芥暟鍏佽浣犲彧鍋滄鍦ㄦ煇涓柟鍚戜笂鐨勬暟鎹紶杈擄紝鑰屼竴涓柟鍚戜笂鐨勬暟鎹紶杈撶戶緇繘琛屻傚浣犲彲浠ュ叧闂煇socket鐨勫啓鎿嶄綔鑰屽厑璁哥戶緇湪璇?span>socket涓婃帴鍙楁暟鎹紝鐩磋嚦璇誨叆鎵鏈夋暟鎹?span>

銆銆int shutdown(int sockfd,int how);

銆銆sockfd鏄渶瑕佸叧闂殑socket鐨勬弿榪扮銆傚弬鏁?span> how鍏佽涓?span>shutdown鎿嶄綔閫夋嫨浠ヤ笅鍑犵鏂瑰紡錛?span>
·0-------涓嶅厑璁哥戶緇帴鏀舵暟鎹?span>
·1-------涓嶅厑璁哥戶緇彂閫佹暟鎹?span>
·2-------涓嶅厑璁哥戶緇彂閫佸拰鎺ユ敹鏁版嵁錛?span>
·鍧囦負涓嶅厑璁稿垯璋冪敤close()

銆銆shutdown鍦ㄦ搷浣滄垚鍔熸椂榪斿洖0錛屽湪鍑虹幇閿欒鏃惰繑鍥?span>-1騫剁疆鐩稿簲errno銆?span>

 

闈㈠悜榪炴帴鐨?span>Socket瀹炰緥

銆銆浠g爜瀹炰緥涓殑鏈嶅姟鍣ㄩ氳繃socket榪炴帴鍚戝鎴風鍙戦佸瓧絎︿覆"Hello, you are connected!"銆傚彧瑕佸湪鏈嶅姟鍣ㄤ笂榪愯璇ユ湇鍔″櫒杞歡錛屽湪瀹㈡埛绔繍琛屽鎴瘋蔣浠訛紝瀹㈡埛绔氨浼氭敹鍒拌瀛楃涓層?span>

銆銆璇ユ湇鍔″櫒杞歡浠g爜濡備笅錛?span>

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define SERVPORT 3333 /*
鏈嶅姟鍣ㄧ洃鍚鍙e彿 */
#define BACKLOG 10 /*
鏈澶у悓鏃惰繛鎺ヨ姹傛暟 */
main()
{
int sockfd,client_fd; /*sock_fd
錛氱洃鍚?span>socket
錛?span>client_fd錛氭暟鎹紶杈?span>socket */
struct sockaddr_in my_addr; /* 鏈満鍦板潃淇℃伅 */
struct sockaddr_in remote_addr; /* 瀹㈡埛绔湴鍧淇℃伅 */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
銆銆perror("socket鍒涘緩鍑洪敊錛?span>"); exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) \
銆銆 == -1) {
perror("bind
鍑洪敊錛?span>");
exit(1);
}
if (listen(sockfd, BACKLOG) == -1) {
perror("listen
鍑洪敊錛?span>");
exit(1);
}
while(1) {
銆銆sin_size = sizeof(struct sockaddr_in);
銆銆if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, \
銆銆&sin_size)) == -1) {
perror("accept
鍑洪敊");
continue;
}
銆銆printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
if (!fork()) { /* 瀛愯繘紼嬩唬鐮佹 */
銆銆 if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1)
銆銆 perror("send鍑洪敊錛?span>");
close(client_fd);
exit(0);
}
銆銆close(client_fd);
銆銆}
}
}

銆銆鏈嶅姟鍣ㄧ殑宸ヤ綔嫻佺▼鏄繖鏍風殑錛氶鍏堣皟鐢?span>socket鍑芥暟鍒涘緩涓涓?span>Socket錛岀劧鍚庤皟鐢?span>bind鍑芥暟灝嗗叾涓庢湰鏈哄湴鍧浠ュ強涓涓湰鍦扮鍙e彿緇戝畾錛岀劧鍚庤皟鐢?span>listen鍦ㄧ浉搴旂殑socket涓婄洃鍚紝褰?span>accpet鎺ユ敹鍒頒竴涓繛鎺ユ湇鍔¤姹傛椂錛屽皢鐢熸垚涓涓柊鐨?span>socket銆傛湇鍔″櫒鏄劇ず璇ュ鎴鋒満鐨?span>IP鍦板潃錛屽茍閫氳繃鏂扮殑socket鍚戝鎴風鍙戦佸瓧絎︿覆"Hello錛?span>you are connected!"銆傛渶鍚庡叧闂socket銆?/span>

銆銆浠g爜瀹炰緥涓殑fork()鍑芥暟鐢熸垚涓涓瓙榪涚▼鏉ュ鐞嗘暟鎹紶杈撻儴鍒嗭紝fork()璇彞瀵逛簬瀛愯繘紼嬭繑鍥炵殑鍊間負0銆傛墍浠ュ寘鍚?span>fork鍑芥暟鐨?span>if璇彞鏄瓙榪涚▼浠g爜閮ㄥ垎錛屽畠涓?span>if璇彞鍚庨潰鐨勭埗榪涚▼浠g爜閮ㄥ垎鏄茍鍙戞墽琛岀殑銆?span>

銆銆瀹㈡埛绔▼搴忎唬鐮佸涓嬶細

#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define SERVPORT 3333
#define MAXDATASIZE 100 /*
姣忔鏈澶ф暟鎹紶杈撻噺 */
main(int argc, char *argv[]){
int sockfd, recvbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if (argc < 2) {
fprintf(stderr,"Please enter the server's hostname!\n");
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL) {
herror("gethostbyname
鍑洪敊錛?span>");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket
鍒涘緩鍑洪敊錛?span>");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr, \
銆銆 sizeof(struct sockaddr)) == -1) {
perror("connect
鍑洪敊錛?span>");
exit(1);
}
if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1) {
perror("recv
鍑洪敊錛?span>");
exit(1);
}
buf[recvbytes] = '\0';
printf("Received: %s",buf);
close(sockfd);
}

 

瀹㈡埛绔▼搴忛鍏堥氳繃鏈嶅姟鍣ㄥ煙鍚嶈幏寰楁湇鍔″櫒鐨?span>IP鍦板潃錛岀劧鍚庡垱寤轟竴涓?span>socket錛岃皟鐢?span>connect鍑芥暟涓庢湇鍔″櫒寤虹珛榪炴帴錛岃繛鎺ユ垚鍔熶箣鍚庢帴鏀朵粠鏈嶅姟鍣ㄥ彂閫佽繃鏉ョ殑鏁版嵁錛屾渶鍚庡叧闂?span>socket銆?/span>

銆銆鍑芥暟gethostbyname()鏄畬鎴愬煙鍚嶈漿鎹㈢殑銆傜敱浜?span>IP鍦板潃闅句互璁板繂鍜岃鍐欙紝鎵浠ヤ負浜嗘柟渚匡紝浜轟滑甯稿父鐢ㄥ煙鍚嶆潵琛ㄧず涓繪満錛岃繖灝遍渶瑕佽繘琛屽煙鍚嶅拰IP鍦板潃鐨勮漿鎹€傚嚱鏁板師鍨嬩負錛?/span>


銆銆struct hostent *gethostbyname(const char *name);
銆銆鍑芥暟榪斿洖涓?span>hosten
鐨勭粨鏋勭被鍨嬶紝瀹冪殑瀹氫箟濡備笅錛?span>
銆銆struct hostent {
char *h_name; /* 涓繪満鐨勫畼鏂瑰煙鍚?span> */
銆銆 char **h_aliases; /* 涓涓互NULL緇撳熬鐨勪富鏈哄埆鍚嶆暟緇?span> */
銆銆 int h_addrtype; /* 榪斿洖鐨勫湴鍧綾誨瀷錛屽湪Internet鐜涓嬩負AF-INET */
銆銆int h_length; /* 鍦板潃鐨勫瓧鑺傞暱搴?span> */
銆銆 char **h_addr_list; /* 涓涓互0緇撳熬鐨勬暟緇勶紝鍖呭惈璇ヤ富鏈虹殑鎵鏈夊湴鍧*/
銆銆};
銆銆#define h_addr h_addr_list[0] /*鍦?span>h-addr-list涓殑絎竴涓湴鍧*/

銆銆褰?span> gethostname()璋冪敤鎴愬姛鏃訛紝榪斿洖鎸囧悜struct hosten鐨勬寚閽堬紝褰撹皟鐢ㄥけ璐ユ椂榪斿洖-1銆傚綋璋冪敤gethostbyname鏃訛紝浣犱笉鑳戒嬌鐢?span>perror()鍑芥暟鏉ヨ緭鍑洪敊璇俊鎭紝鑰屽簲璇ヤ嬌鐢?span>herror()鍑芥暟鏉ヨ緭鍑恒?span>

銆銆鏃犺繛鎺ョ殑瀹㈡埛/鏈嶅姟鍣ㄧ▼搴忕殑鍦ㄥ師鐞嗕笂鍜岃繛鎺ョ殑瀹㈡埛/鏈嶅姟鍣ㄦ槸涓鏍風殑錛屼袱鑰呯殑鍖哄埆鍦ㄤ簬鏃犺繛鎺ョ殑瀹㈡埛/鏈嶅姟鍣ㄤ腑鐨勫鎴蜂竴鑸笉闇瑕佸緩绔嬭繛鎺ワ紝鑰屼笖鍦ㄥ彂閫佹帴鏀舵暟鎹椂錛岄渶瑕佹寚瀹氳繙绔満鐨勫湴鍧銆?span>

銆銆闃誨鍜岄潪闃誨

銆銆闃誨鍑芥暟鍦ㄥ畬鎴愬叾鎸囧畾鐨勪換鍔′互鍓嶄笉鍏佽紼嬪簭璋冪敤鍙︿竴涓嚱鏁般備緥濡傦紝紼嬪簭鎵ц涓涓鏁版嵁鐨勫嚱鏁拌皟鐢ㄦ椂錛屽湪姝ゅ嚱鏁板畬鎴愯鎿嶄綔浠ュ墠灝嗕笉浼氭墽琛屼笅涓紼嬪簭璇彞銆傚綋鏈嶅姟鍣ㄨ繍琛屽埌accept璇彞鏃訛紝鑰屾病鏈夊鎴瘋繛鎺ユ湇鍔¤姹傚埌鏉ワ紝鏈嶅姟鍣ㄥ氨浼氬仠姝㈠湪accept璇彞涓婄瓑寰呰繛鎺ユ湇鍔¤姹傜殑鍒版潵銆傝繖縐嶆儏鍐電О涓洪樆濉烇紙blocking錛夈傝岄潪闃誨鎿嶄綔鍒欏彲浠ョ珛鍗沖畬鎴愩傛瘮濡傦紝濡傛灉浣犲笇鏈涙湇鍔″櫒浠呬粎娉ㄦ剰媯鏌ユ槸鍚︽湁瀹㈡埛鍦ㄧ瓑寰呰繛鎺ワ紝鏈夊氨鎺ュ彈榪炴帴錛屽惁鍒欏氨緇х畫鍋氬叾浠栦簨鎯咃紝鍒欏彲浠ラ氳繃灝?span>Socket璁劇疆涓洪潪闃誨鏂瑰紡鏉ュ疄鐜般傞潪闃誨socket鍦ㄦ病鏈夊鎴峰湪絳夊緟鏃跺氨浣?span>accept璋冪敤绔嬪嵆榪斿洖銆?span>
銆銆#include
銆銆#include
銆銆……
sockfd = socket(AF_INET,SOCK_STREAM,0);
fcntl(sockfd,F_SETFL,O_NONBLOCK)
錛?span>
……

銆銆閫氳繃璁劇疆socket涓洪潪闃誨鏂瑰紡錛屽彲浠ュ疄鐜?span>"杞"鑻ュ共Socket銆傚綋浼佸浘浠庝竴涓病鏈夋暟鎹瓑寰呭鐞嗙殑闈為樆濉?span>Socket璇誨叆鏁版嵁鏃訛紝鍑芥暟灝嗙珛鍗寵繑鍥烇紝榪斿洖鍊間負-1錛屽茍緗?span>errno鍊間負EWOULDBLOCK銆備絾鏄繖縐?span>"杞"浼氫嬌CPU澶勪簬蹇欑瓑寰呮柟寮忥紝浠庤岄檷浣庢ц兘錛屾氮璐圭郴緇熻祫婧愩傝岃皟鐢?span>select()浼氭湁鏁堝湴瑙e喅榪欎釜闂錛屽畠鍏佽浣犳妸榪涚▼鏈韓鎸傝搗鏉ワ紝鑰屽悓鏃朵嬌緋葷粺鍐呮牳鐩戝惉鎵瑕佹眰鐨勪竴緇勬枃浠舵弿榪扮鐨勪換浣曟椿鍔紝鍙紜鍦ㄤ換浣曡鐩戞帶鐨勬枃浠舵弿榪扮涓婂嚭鐜版椿鍔紝select()璋冪敤灝嗚繑鍥炴寚紺鴻鏂囦歡鎻忚堪絎﹀凡鍑嗗濂界殑淇℃伅錛屼粠鑰屽疄鐜頒簡涓鴻繘紼嬮夊嚭闅忔満鐨勫彉鍖栵紝鑰屼笉蹇呯敱榪涚▼鏈韓瀵硅緭鍏ヨ繘琛屾祴璇曡屾氮璐?span>CPU寮閿銆?span>select鍑芥暟鍘熷瀷涓?span>:
int select(int numfds,fd_set *readfds,fd_set *writefds錛?span>
fd_set *exceptfds,struct timeval *timeout);

銆銆鍏朵腑readfds銆?span>writefds銆?span>exceptfds鍒嗗埆鏄select()鐩戣鐨勮銆佸啓鍜屽紓甯稿鐞嗙殑鏂囦歡鎻忚堪絎﹂泦鍚堛傚鏋滀綘甯屾湜紜畾鏄惁鍙互浠庢爣鍑嗚緭鍏ュ拰鏌愪釜socket鎻忚堪絎﹁鍙栨暟鎹紝浣犲彧闇瑕佸皢鏍囧噯杈撳叆鐨勬枃浠舵弿榪扮0鍜岀浉搴旂殑sockdtfd鍔犲叆鍒?span>readfds闆嗗悎涓紱numfds鐨勫兼槸闇瑕佹鏌ョ殑鍙風爜鏈楂樼殑鏂囦歡鎻忚堪絎﹀姞1錛岃繖涓緥瀛愪腑numfds鐨勫煎簲涓?span>sockfd+1錛涘綋select榪斿洖鏃訛紝readfds灝嗚淇敼錛屾寚紺烘煇涓枃浠舵弿榪扮宸茬粡鍑嗗琚鍙栵紝浣犲彲浠ラ氳繃FD_ISSSET()鏉ユ祴璇曘備負浜嗗疄鐜?span>fd_set涓搴旂殑鏂囦歡鎻忚堪絎︾殑璁劇疆銆佸浣嶅拰嫻嬭瘯錛屽畠鎻愪緵浜嗕竴緇勫畯錛?span>
銆銆FD_ZERO(fd_set *set)----娓呴櫎涓涓枃浠舵弿榪扮闆嗭紱
銆銆FD_SET(int fd,fd_set *set)----灝嗕竴涓枃浠舵弿榪扮鍔犲叆鏂囦歡鎻忚堪絎﹂泦涓紱
銆銆FD_CLR(int fd,fd_set *set)----灝嗕竴涓枃浠舵弿榪扮浠庢枃浠舵弿榪扮闆嗕腑娓呴櫎錛?span>
銆銆FD_ISSET(int fd,fd_set *set)----璇曞垽鏂槸鍚︽枃浠舵弿榪扮琚疆浣嶃?span>
銆銆Timeout鍙傛暟鏄竴涓寚鍚?span>struct timeval綾誨瀷鐨勬寚閽堬紝瀹冨彲浠ヤ嬌select()鍦ㄧ瓑寰?span>timeout闀挎椂闂村悗娌℃湁鏂囦歡鎻忚堪絎﹀噯澶囧ソ鍗寵繑鍥炪?span>struct timeval鏁版嵁緇撴瀯涓猴細
銆銆struct timeval {
銆銆 int tv_sec; /* seconds */
銆銆 int tv_usec; /* microseconds */ };

銆銆POP3瀹㈡埛绔疄渚?span>

銆銆涓嬮潰鐨勪唬鐮佸疄渚嬪熀浜?span>POP3鐨勫鎴峰崗璁紝涓庨偖浠舵湇鍔″櫒榪炴帴騫跺彇鍥炴寚瀹氱敤鎴峰笎鍙風殑閭歡銆備笌閭歡鏈嶅姟鍣ㄤ氦浜掔殑鍛戒護瀛樺偍鍦ㄥ瓧絎︿覆鏁扮粍POPMessage涓紝紼嬪簭閫氳繃涓涓?span>do-while寰幆渚濇鍙戦佽繖浜涘懡浠ゃ?span>

#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define POP3SERVPORT 110
#define MAXDATASIZE 4096

main(int argc, char *argv[]){
int sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
char *POPMessage[]={
"USER userid\r\n",
"PASS password\r\n",
"STAT\r\n",
"LIST\r\n",
"RETR 1\r\n",
"DELE 1\r\n",
"QUIT\r\n",
NULL
};
int iLength;
int iMsg=0;
int iEnd=0;
char buf[MAXDATASIZE];

if((host=gethostbyname("your.server"))==NULL) {
perror("gethostbyname error");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket error");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(POP3SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){
perror("connect error");
exit(1);
}

do {
send(sockfd,POPMessage[iMsg],strlen(POPMessage[iMsg]),0);
printf("have sent: %s",POPMessage[iMsg]);

iLength=recv(sockfd,buf+iEnd,sizeof(buf)-iEnd,0);
iEnd+=iLength;
buf[iEnd]='\0';
printf("received: %s,%d\n",buf,iMsg);

iMsg++;
} while (POPMessage[iMsg]);

close(sockfd);
}

 



]]>
inet_addr鍑芥暟鐨勫疄鐜?/title><link>http://m.shnenglu.com/aurain/archive/2007/12/05/37855.html</link><dc:creator>姘?/dc:creator><author>姘?/author><pubDate>Wed, 05 Dec 2007 07:58:00 GMT</pubDate><guid>http://m.shnenglu.com/aurain/archive/2007/12/05/37855.html</guid><wfw:comment>http://m.shnenglu.com/aurain/comments/37855.html</wfw:comment><comments>http://m.shnenglu.com/aurain/archive/2007/12/05/37855.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/aurain/comments/commentRss/37855.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/aurain/services/trackbacks/37855.html</trackback:ping><description><![CDATA[<p>杈撳叆鏄偣鍒嗙殑IP鍦板潃鏍煎紡錛堝A.B.C.D)鐨勫瓧絎︿覆錛屼粠璇ュ瓧絎︿覆涓彁鍙栧嚭姣忎竴閮ㄥ垎錛岃漿鎹負ULONG,鍋囪寰楀埌4涓猆LONG鍨嬬殑A,B,C,D,<br>ulAddress錛圲LONG鍨嬶級鏄漿鎹㈠悗鐨勭粨鏋滐紝<br>ulAddress = D<<24 + C<<16 + B<<8 + A(緗戠粶瀛楄妭搴忥級錛屽嵆inet_addr(const char *)鐨勮繑鍥炵粨鏋?br>鍙﹀錛屾垜浠篃鍙互寰楀埌鎶婅IP杞崲涓轟富鏈哄簭鐨勭粨鏋滐紝杞崲鏂規(guī)硶涓鏍?br>A<<24 + B<<16 + C<<8 + D<font style="BACKGROUND-COLOR: #cce8cf"></font></p> <img src ="http://m.shnenglu.com/aurain/aggbug/37855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/aurain/" target="_blank">姘?/a> 2007-12-05 15:58 <a href="http://m.shnenglu.com/aurain/archive/2007/12/05/37855.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://663747.com" target="_blank">亚洲自拍偷拍一区</a>| <a href="http://jxrisen.com" target="_blank">国产自产女人91一区在线观看</a>| <a href="http://jj8518.com" target="_blank">欧美一级片久久久久久久</a>| <a href="http://llyx888.com" target="_blank">亚洲福利在线看</a>| <a href="http://xian369.com" target="_blank">狠狠干综合网</a>| <a href="http://nebnb89.com" target="_blank">国产一区二区三区在线观看免费</a>| <a href="http://www-232323.com" target="_blank">国产精品久久久久久久午夜</a>| <a href="http://xcao10.com" target="_blank">欧美日本国产</a>| <a href="http://pinyuanad.com" target="_blank">欧美日韩国产精品一卡</a>| <a href="http://fjccjq.com" target="_blank">美日韩精品免费观看视频</a>| <a href="http://8x29ft.com" target="_blank">久久国产视频网</a>| <a href="http://www8xvi.com" target="_blank">欧美在线一区二区</a>| <a href="http://www-72794.com" target="_blank">久久精品国产成人</a>| <a href="http://9885888.com" target="_blank">在线亚洲自拍</a>| <a href="http://8946286.com" target="_blank">久久不见久久见免费视频1</a>| <a href="http://1181318.com" target="_blank">欧美影院在线</a>| <a href="http://2061375.com" target="_blank">国产日韩欧美三区</a>| <a href="http://aimashe.com" target="_blank">翔田千里一区二区</a>| <a href="http://1zz8903.com" target="_blank">欧美91大片</a>| <a href="http://a6a3.com" target="_blank">在线国产精品一区</a>| <a href="http://huayoue.com" target="_blank">亚洲综合另类</a>| <a href="http://nn99dd.com" target="_blank">亚洲一二三级电影</a>| <a href="http://012928.com" target="_blank">在线视频精品一</a>| <a href="http://aass22.com" target="_blank">国语自产精品视频在线看</a>| <a href="http://830085.com" target="_blank">久久成人免费</a>| <a href="http://7sscc.com" target="_blank">欧美一区二区免费</a>| <a href="http://tigerpowerinc.com" target="_blank">午夜免费日韩视频</a>| <a href="http://342889.com" target="_blank">一区二区高清视频</a>| <a href="http://414670.com" target="_blank">亚洲国产精品一区二区尤物区 </a>| <a href="http://gztcm01.com" target="_blank">亚洲欧美日韩综合一区</a>| <a href="http://ourskycity.com" target="_blank">欧美亚洲自偷自偷</a>| <a href="http://huayoue.com" target="_blank">欧美大片免费看</a>| <a href="http://1235656.com" target="_blank">亚洲精品乱码久久久久久黑人</a>| <a href="http://yxtczx.com" target="_blank">欧美激情在线</a>| <a href="http://nagebbs.com" target="_blank">亚洲国产日韩欧美在线动漫</a>| <a href="http://800716.com" target="_blank">久久中文欧美</a>| <a href="http://caogb.com" target="_blank">久久精品国产亚洲一区二区</a>| <a href="http://www34523.com" target="_blank">亚洲毛片在线观看</a>| <a href="http://zyjzz.com" target="_blank">西西裸体人体做爰大胆久久久 </a>| <a href="http://maomi998.com" target="_blank">亚洲人成毛片在线播放女女</a>| <a href="http://sh738.com" target="_blank">欧美国产日韩a欧美在线观看</a>| <a href="http://444398.com" target="_blank">尤妮丝一区二区裸体视频</a>| <a href="http://gztcm01.com" target="_blank">国产精品久久久久高潮</a>| <a href="http://689992.com" target="_blank">欧美激情一区二区</a>| <a href="http://metagasa.com" target="_blank">一区二区三区在线不卡</a>| <a href="http://xfrlyy.com" target="_blank">欧美三级免费</a>| <a href="http://9e67.com" target="_blank">亚洲欧美中文另类</a>| <a href="http://216667.com" target="_blank">欧美一区二区三区四区视频</a>| <a href="http://www633998.com" target="_blank">欧美日韩国产综合视频在线</a>| <a href="http://jldianda.com" target="_blank">国产精品日韩在线观看</a>| <a href="http://569658.com" target="_blank">激情综合激情</a>| <a href="http://zhipiao998.com" target="_blank">久久精品中文</a>| <a href="http://ybshg.com" target="_blank">久久精品视频99</a>| <a href="http://mm910.com" target="_blank">国产精品美女在线</a>| <a href="http://hkbsi.com" target="_blank">亚洲黄色毛片</a>| <a href="http://56qn.com" target="_blank">可以看av的网站久久看</a>| <a href="http://xashp.com" target="_blank">亚洲日本成人</a>| <a href="http://51jieyanla.com" target="_blank">亚洲理论电影网</a>| <a href="http://royaljinma.com" target="_blank">在线一区日本视频</a>| <a href="http://xxoo668.com" target="_blank">亚洲欧美日韩一区</a>| <a href="http://ccnn33.com" target="_blank">欧美精品日韩一区</a>| <a href="http://666777v3.com" target="_blank">国产精品xxxav免费视频</a>| <a href="http://194123.com" target="_blank">国产精品日韩一区二区</a>| <a href="http://zzztt04.com" target="_blank">久久久爽爽爽美女图片</a>| <a href="http://xing69.com" target="_blank">日韩网站免费观看</a>| <a href="http://8842aa.com" target="_blank">亚洲一区二区三区精品在线观看 </a>| <a href="http://szzzzzzz.com" target="_blank">亚洲专区国产精品</a>| <a href="http://www-232323.com" target="_blank">欧美午夜电影一区</a>| <a href="http://tubcup.com" target="_blank">蜜桃av综合</a>| <a href="http://7776701.com" target="_blank">欧美日韩精品在线</a>| <a href="http://zd-jm.com" target="_blank">国产精品播放</a>| <a href="http://wwwp6660.com" target="_blank">久久精品国产99</a>| <a href="http://emu160.com" target="_blank">国产精品日韩一区二区三区</a>| <a href="http://zuan3344.com" target="_blank">欧美一级网站</a>| <a href="http://sihu121.com" target="_blank">狂野欧美激情性xxxx</a>| <a href="http://88xjj.com" target="_blank">国产日韩欧美一区在线 </a>| <a href="http://021jjjflaw.com" target="_blank">国产精品爱啪在线线免费观看</a>| <a href="http://phitris.com" target="_blank">欧美日韩综合另类</a>| <a href="http://9881600.com" target="_blank">欧美激情一区二区三区在线</a>| <a href="http://687989.com" target="_blank">国产精品vip</a>| <a href="http://2589999.com" target="_blank">午夜精品一区二区三区在线播放</a>| <a href="http://woniuminsu.com" target="_blank">欧美成人免费小视频</a>| <a href="http://www-666638.com" target="_blank">国产精品看片资源</a>| <a href="http://412342.com" target="_blank">亚洲一区综合</a>| <a href="http://9a9u.com" target="_blank">亚洲成色www久久网站</a>| <a href="http://223zzz.com" target="_blank">美女国产精品</a>| <a href="http://www17bxbx.com" target="_blank">悠悠资源网久久精品</a>| <a href="http://9882355.com" target="_blank">亚洲在线视频一区</a>| <a href="http://zhaosaofu.com" target="_blank">亚洲精品影视在线观看</a>| <a href="http://cgnwp.com" target="_blank">日韩视频在线免费观看</a>| <a href="http://713b.com" target="_blank">狠狠操狠狠色综合网</a>| <a href="http://9658888.com" target="_blank">欧美第一黄网免费网站</a>| <a href="http://133255.com" target="_blank">亚洲性线免费观看视频成熟</a>| <a href="http://dk13studio.com" target="_blank">亚洲宅男天堂在线观看无病毒</a>| <a href="http://aijiashe.com" target="_blank">久久天天狠狠</a>| <a href="http://www13256.com" target="_blank">亚洲国产清纯</a>| <a href="http://56667r.com" target="_blank">日韩午夜在线电影</a>| <a href="http://www-116036.com" target="_blank">国产在线一区二区三区四区</a>| <a href="http://nztd20.com" target="_blank">欧美国产日韩精品</a>| <a href="http://smiczbb.com" target="_blank">国产精品免费aⅴ片在线观看</a>| <a href="http://55kam.com" target="_blank">性一交一乱一区二区洋洋av</a>| <a href="http://1392266.com" target="_blank">欧美伦理91i</a>| <a href="http://syddzs.com" target="_blank">亚洲精美视频</a>| <a href="http://cmtqd.com" target="_blank">国产午夜精品一区理论片飘花</a>| <a href="http://ddnwater.com" target="_blank">国产亚洲精品一区二555</a>| <a href="http://chinagreetown.com" target="_blank">亚洲欧美日韩区</a>| <a href="http://ycpeixun.com" target="_blank">欧美激情女人20p</a>| <a href="http://4545www.com" target="_blank">欧美亚洲一区二区在线</a>| <a href="http://sepapapa8888.com" target="_blank">亚洲欧美日韩综合</a>| <a href="http://elpezomaha.com" target="_blank">国产伦一区二区三区色一情</a>| <a href="http://444398.com" target="_blank">香港成人在线视频</a>| <a href="http://gztcm01.com" target="_blank">亚洲第一黄网</a>| <a href="http://birhit.com" target="_blank">久久久91精品国产一区二区精品</a>| <a href="http://www-34909.com" target="_blank">国产精品都在这里</a>| <a href="http://shuoqe.com" target="_blank">久久人人爽国产</a>| <a href="http://www33779.com" target="_blank">亚洲国产一区二区三区a毛片</a>| <a href="http://5207877.com" target="_blank">日韩亚洲欧美成人</a>| <a href="http://gelaimeiwedding.com" target="_blank">国产精品麻豆va在线播放</a>| <a href="http://91see8.com" target="_blank">欧美一区二区三区免费大片</a>| <a href="http://www123720a.com" target="_blank">欧美电影免费观看</a>| <a href="http://246767.com" target="_blank">亚洲一区二区三区精品动漫</a>| <a href="http://4466o.com" target="_blank">欧美久久综合</a>| <a href="http://www-888690.com" target="_blank">久久se精品一区精品二区</a>| <a href="http://4106446.com" target="_blank">国产精品久久久久久久久久免费 </a>| <a href="http://797298.com" target="_blank">欧美日韩国产成人</a>| <a href="http://xajtyd.com" target="_blank">亚洲电影下载</a>| <a href="http://miaoxp.com" target="_blank">亚洲成人资源</a>| <a href="http://derinsolar.com" target="_blank">久久人人97超碰精品888</a>| <a href="http://66889h.com" target="_blank">欧美11—12娇小xxxx</a>| <a href="http://dusenborg.com" target="_blank">在线观看视频日韩</a>| <a href="http://1323666.com" target="_blank">国产亚洲综合性久久久影院</a>| <a href="http://557523.com" target="_blank">国产精品免费一区二区三区观看</a>| <a href="http://ju5558.com" target="_blank">欧美视频二区</a>| <a href="http://www8888803.com" target="_blank">国产精品日韩精品</a>| <a href="http://099553.com" target="_blank">欧美v亚洲v综合ⅴ国产v</a>| <a href="http://quintostdio.com" target="_blank">日韩视频不卡</a>| <a href="http://weixiao668.com" target="_blank">欧美三区在线视频</a>| <a href="http://xvideoxxnx.com" target="_blank">国产精品尤物福利片在线观看</a>| <a href="http://uuuu79.com" target="_blank">午夜影院日韩</a>| <a href="http://811914.com" target="_blank">欧美成人免费全部观看天天性色</a>| <a href="http://by56677.com" target="_blank">欧美激情在线</a>| <a href="http://www-44469.com" target="_blank">先锋影音国产一区</a>| <a href="http://qmynong.com" target="_blank">亚洲第一二三四五区</a>| <a href="http://8xv0.com" target="_blank">亚洲电影网站</a>| <a href="http://333666333.com" target="_blank">久久久久久亚洲综合影院红桃 </a>| <a href="http://whrcjy.com" target="_blank">国内视频精品</a>| <a href="http://66688811.com" target="_blank">欧美精品一区二区三</a>| <a href="http://scqike.com" target="_blank">日韩一区二区精品视频</a>| <a href="http://d1112.com" target="_blank">蜜臀久久99精品久久久久久9</a>| <a href="http://337791.com" target="_blank">久久久久综合</a>| <a href="http://91chaopron.com" target="_blank">一本大道av伊人久久综合</a>| <a href="http://www-787333.com" target="_blank">国产精品视频大全</a>| <a href="http://kk553.com" target="_blank">亚洲无玛一区</a>| <a href="http://zhaosaoz.com" target="_blank">亚洲欧美日韩精品久久</a>| <a href="http://s3yx.com" target="_blank">av成人老司机</a>| <a href="http://123086.com" target="_blank">99ri日韩精品视频</a>| <a href="http://by4672.com" target="_blank">亚洲欧美日韩国产精品</a>| <a href="http://7171152.com" target="_blank">亚洲精品视频一区</a>| <a href="http://www-787788.com" target="_blank">欧美日韩亚洲国产精品</a>| <a href="http://universehb.com" target="_blank">欧美日本三级</a>| <a href="http://www901aaa.com" target="_blank">一本到高清视频免费精品</a>| <a href="http://858185gg.com" target="_blank">黄色成人av在线</a>| <a href="http://z169.com" target="_blank">亚洲专区在线</a>| <a href="http://8842aa.com" target="_blank">亚洲欧美99</a>| <a href="http://sxxawef.com" target="_blank">久久综合伊人77777蜜臀</a>| <a href="http://aijiashe.com" target="_blank">免费亚洲婷婷</a>| <a href="http://wwwby6682.com" target="_blank">欧美暴力喷水在线</a>| <a href="http://044925.com" target="_blank">亚洲黄色成人</a>| <a href="http://filmcameralibrary.com" target="_blank">久久国产直播</a>| <a href="http://788111c.com" target="_blank">亚洲人成人一区二区在线观看</a>| <a href="http://jlkcjz.com" target="_blank">亚洲精品一区二区在线</a>| <a href="http://caoliu20.com" target="_blank">亚洲第一中文字幕</a>| <a href="http://s0247.com" target="_blank">亚洲免费成人</a>| <a href="http://mimi78.com" target="_blank">亚洲承认在线</a>| <a href="http://11b29.com" target="_blank">99av国产精品欲麻豆</a>| <a href="http://ggg4444.com" target="_blank">久久乐国产精品</a>| <a href="http://zzzz80.com" target="_blank">黑人巨大精品欧美黑白配亚洲</a>| <a href="http://lctongda.com" target="_blank">欧美一级久久久</a>| <a href="http://lucky5888.com" target="_blank">欧美亚洲一区在线</a>| <a href="http://wwwzmcc1.com" target="_blank">亚洲国产日本</a>| <a href="http://www333444123.com" target="_blank">一区二区三区日韩欧美</a>| <a href="http://ddixx.com" target="_blank">国产在线精品成人一区二区三区</a>| <a href="http://luqintang.com" target="_blank">久久精品国产一区二区三区免费看</a>| <a href="http://372469.com" target="_blank">性18欧美另类</a>| <a href="http://d77dd.com" target="_blank">一本久道久久综合婷婷鲸鱼</a>| <a href="http://essuee.com" target="_blank">一区二区三区视频在线播放</a>| <a href="http://337795.com" target="_blank">国产欧美精品日韩区二区麻豆天美 </a>| <a href="http://dusenborg.com" target="_blank">亚洲免费大片</a>| <a href="http://kanzhelu31.com" target="_blank">久久久人成影片一区二区三区观看</a>| <a href="http://tareandshare.com" target="_blank">亚洲国产精品一区二区www</a>| <a href="http://48655aa.com" target="_blank">一本一本久久</a>| <a href="http://389746.com" target="_blank">亚洲在线观看免费视频</a>| <a href="http://ayxchc.com" target="_blank">欧美福利电影网</a>| <a href="http://789469.com" target="_blank">免费中文日韩</a>| <a href="http://www446168.com" target="_blank">好男人免费精品视频</a>| <a href="http://hjaa7.com" target="_blank">亚洲欧美国产精品va在线观看</a>| <a href="http://32666066.com" target="_blank">免费看亚洲片</a>| <a href="http://wwzz3.com" target="_blank">亚洲黄色尤物视频</a>| <a href="http://9xxpp.com" target="_blank">亚洲精品欧美在线</a>| <a href="http://395493.com" target="_blank">欧美日韩一区三区</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>