不得不說,客戶端的connect函數和服務端的accept函數是一對好基友,如果客戶端沒有去connect, 那么服務端的accept會一直在那里傻傻地痴痴地等待,我們先來看看connect函數的原型吧:
WINSOCK_API_LINKAGE int WSAAPI connect( SOCKET s, const struct sockaddr FAR * name, int namelen );
第一個參數是客戶端的套接字(表明即將發起連接請求),第二個參數是服務端的套接字所在的“地方”(“地方”是我自定義的專有名詞),第三個參數是該“地方”的大小。
如果請求連接成功,則返回0,否則返回錯誤碼。
下面我們看看服務端如何去發起連接請求:
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(8888); connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
當然啦,應該注意處理函數的返回值,上次就被師傅說了一次。
知識點:
- closesocket函數的作用和socket函數的作用相反,釋放為套接字分配的資源。
- WSACleanup函數和WSAStartup函數的作用相反,終止對套接字庫的使用。
- int main(int argc, char *argv[] ):argc是命令行參數總個數,argv[0] 是程序名,argv[1] 是參數1, argv[i] 是參數i.
原文鏈接:http://blog.csdn.net/stpeace/article/category/1300762
