windows下的一個C++ socket服務器,用到了C++11的相關內容,現在還不是很完善,以後會不斷改進的!
<winsock2.h> #include <Windows.h>
#include <stdio.h><iostream><thread><><fstream><sstream> comment(lib,"ws2_32.lib")
1. <winsock2.h> 大家會發現windows下有winsock.h和winsock2.h,winsock2.h是winsock.h的升級版,它設計的目的是替代winsock.h,而不是擴展它。在winsock.h中定義的所有內容在winsock2.h中也都定義了。winsock2.h定義了_WINSOCKAPI_,阻止編譯器去處理後面的winsock.h,這樣編譯不會報錯。但是如果winsock.h在winsock2.h前出現,winsock2.h就重新定義winsock.h已經定義的東西,導致編譯報錯。
比如
#include<winsock.h>
#include<winsock2.h>
//error winsock.h在winsock2.h前出現
#include<winsock2.h>
#include<winsock.h>
//正確 winsock2.h在winsock.h前出現
值得注意的是在windows.h中 舊的版本(我使用的是win7 vs2013)中自動包涵winsock.h,而在新的版本(win8?)中會自動包涵winsock2.h,
所以在某些版本中
#include<windows.h>
#include<winsock2.h>
//error windows.h中包含了winsock.h winsock.h在winsock2.h前出現
#include<winsock2.h>
#include<windows.h>
//正確
此外某些第三方的類庫可能也包含了winsock.h,或者在自己的代碼中既有winsock.h和winsock2.h。這樣在使用時要格外的注意!!!
2 #pragma comment(lib,"ws2_32.lib") 如果沒有添加這行代碼的話,會出現很多和ws2def.h文件相關的錯誤
這是因為程序缺少相應的靜態鏈接庫,也可以手動添加:在項目上點右鍵->屬性->配置屬性->鏈接器->輸入->附加依賴項加入ws2_32.lib(每次都要手動添加,不推薦)
#include <winsock.h> //包含winsock這個頭文件,內容是網絡編程socket相關部分API
#pragma
comment(lib,"Ws2_32.lib") //這是鏈接API相關連的Ws2_32.lib靜態庫
靜態鏈接庫lib和動態鏈接庫dll的區別:
有興趣的可以參看http://blog.sina.com.cn/s/blog_61ba4898010153zu.html