原创 18. socket 網絡字節序 以及 大端序 小端序

不同CPU中,4字節整數1在內存空間的存儲方式是不同的。4字節整數1可用2進製表示如下: 00000000 00000000 00000000 00000001 有些CPU以上面的順序存儲到內存,另外一些CPU則以倒序存儲,如下

原创 Goland---常用快捷鍵

文件相關快捷鍵: CTRL+E,打開最近瀏覽過的文件。 CTRL+SHIFT+E,打開最近更改的文件。 CTRL+N,可以快速打開struct結構體。 CTRL+SHIFT+N,可以快速打開文件。 代碼格式化: CTR

原创 GoLand中無法導入自己的包

解決方法: 1.去File->Settings中的GoPath中把你當前的這個工作包加進入如:Project 2.在Project包下創建src目錄,在src目錄下在創建你自己的包,如:gorotine下的gorotine.go

原创 爲什麼環境變量中設置了JDK版本爲1.7,但是在cmd中java -version 是1.8版本

爲什麼環境變量中設置了JDK版本爲1.7,但是在cmd中java -version 是1.8版本,筆記本里同時存在倆個版本。 將JAVA_HOME的路徑配置到Path的最前面,這樣路徑參數就不會受到影響。設置完成之後就會發現jav

原创 2.Linux命令

Linux常用命令: 1.1 命令基本格式 1.2 文件處理命令 1.3 文件搜索命令 1.4 幫助命令 1.5 壓縮與解壓縮命令 1.6 關機和重啓命令 1.7 其他常用命令 1.1 命令基本格式: 命令提示符: 命令格式:

原创 19. 在socket 中使用域名

客戶端中直接使用IP地址會有很大的弊端,一旦IP地址變化(IP地址會經常變動),客戶端軟件就會出現錯誤。 而使用域名會方便很多,註冊後的域名只要每年續費就永遠屬於自己的,更換IP地址時修改域名解析即可,不會影響軟件的正常使用。 關

原创 20. UDP套接字

TCP 是面向連接的傳輸協議,建立連接時要經過三次握手,斷開連接時要經過四次握手,中間傳輸數據時也要回復ACK包確認,多種機制保證了數據能夠正確到達,不會丟失或出錯。 UDP 是非連接的傳輸協議,沒有建立連接和斷開連接的過程,它只

原创 16. 優雅的斷開連接 --- shutdown()

調用 close()/closesocket() 函數意味着完全斷開連接,即不能發送數據也不能接收數據,這種“生硬”的方式有時候會顯得不太“優雅”。 圖1:close()/closesocket() 斷開連接 上圖演示了兩臺正在

原创 17. socket 文件傳輸功能的實現

socket 文件傳輸程序,這是一個非常實用的例子。要實現的功能爲:client 從 server 下載一個文件並保存到本地。 編寫這個程序需要注意兩個問題: 文件大小不確定,有可能比緩衝區大很多,調用一次 write()/s

原创 3. Windows 數據類型

Windows使用typedef或#define定了很多新的數據類型,前面幾節中我們已經領略到了。它們雖然多,但是都有規律可循,很多都是對C/C++中數據類型的簡單加工,而且很容易“見名知意”。要想學習Windows編程,必須要了

原创 13. TCP數據包結構以及三次握手

TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基於字節流的通信協議,數據在傳輸前要建立連接,傳輸完畢後還要斷開連接。 客戶端在收發數據前要使用 connect() 函數

原创 2. Windows 程序

編寫Windows程序,首先要包含 windows.h 頭文件。windows.h 還包含了其他一些Windows頭文件,例如: - windef.h:基本類型定義 - winbase.h:內核函數 - wingdi.h:

原创 21. 基於UDP的服務器端和客戶端

UDP中的服務器端和客戶端沒有連接 UDP不像TCP,無需在連接狀態下交換數據,因此基於UDP的服務器端和客戶端也無需經過連接過程。也就是說,不必調用 listen() 和 accept() 函數。UDP中只有創建套接字的過程和數

原创 1. Windows API

我們學習的都是跟黑乎乎的屏幕打交道,像QQ、360、VC6.0這樣的軟件都是帶界面的,怎麼做到的呢? 前面我們講的”黑屏“叫控制檯應用程序(Win32 Console Application),也稱DOS程序(或MS-DOS程序)

原创 __stdcall,__cdecl,__pascal,__fastcall的區別

__cdecl __cdecl 是 C Declaration 的縮寫,表示 C 語言默認的函數調用方法:所有參數從右到左依次入棧,這些參數由調用者清除,稱爲手動清棧。被調用函數不會要求調用者傳遞多少參數,調用者傳遞過多或者