MinGW WinSockets 程式設計

2021-07-04 08:22:45 字數 1415 閱讀 3325

前言:

大一的時候乙個學長給我推薦mingw(minimalist gnufor windows) developer studio,後來就一直用了下去,感覺比vc++和dev c好用,比vs更輕量級吧。

最近需要寫乙個簡單的winsockets client 來測試伺服器,發現編譯問題。

客戶端**:

#include #include using namespace std;

#pragma comment(lib, "ws2_32.lib")

#define port 5154

#define ip_address "127.0.0.1"

int main(int argc, char * argv)

clientsocket = socket(af_inet, sock_stream, ipproto_tcp);

if (clientsocket == invalid_socket)

serveraddr.sin_family = af_inet;

serveraddr.sin_addr.s_addr = inet_addr(ip_address);

serveraddr.sin_port = htons(port);

memset(serveraddr.sin_zero, 0x00, 8);

ret = connect(clientsocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));

if (ret == socket_error)

while (true)

{ cout << "please input message:"<

1.wsastartup完成winsocket服務初始化

2.建立套接字

3.設定伺服器網路引數

4.發起連線

5.傳送資料

6.關閉套接字關閉winsockets服務

undefined reference to `wsastartup@8'

undefined reference to ******x

網上有這樣的解決方案

在**前面加上:

#pragma comment(lib, "ws2_32.lib")

發現並沒有什麼作用。

後來得知,mingw沒有#pragma comment這樣的預處理命令。

最終解決辦法

project -> settings -> links -> extra linking options 

加上:-lws2_32

靜態聯編與動態聯編

在c 中,多型性主要是通過函式過載實現的。過載函式是指程式中對同名函式進行呼叫時,編譯器會根據函式引數的型別和個數,決定該呼叫哪一段函式 來處理這個函式呼叫。這種把函式呼叫與適當的函式 相對應的動作,叫做聯編。聯編分為靜態聯編和動態聯編。在編譯階段決定執行哪個同名的被呼叫函式,稱為靜態聯編。在編譯階...

靜態聯編和動態聯編

聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...

靜態聯編和動態聯編

聯編就是將模組或者函式合併在一起生成可執行 的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯...