程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> windows下的C++ socket服務器(1)

windows下的C++ socket服務器(1)

編輯:C++入門知識

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved