C 網路程式設計 1 收發乙個快遞

2022-09-19 22:24:12 字數 2812 閱讀 7440

從事網路方面的開發有一段時間了,每天在各種瑣碎的事情中奔波,對我這種野路子出身的c++程式設計師,感覺總是欠缺點什麼。

終於,思量再三,準備結束這繁雜卻無法前進寸步的工作,也暫時給自己一些時間,梳理一下自己摸索網路開發的一些東西,從簡單到複雜,一步一步的高階。希望能讓自己更進一步,也希望能幫助一些和我當年一樣懵逼的同行們,堅持就是勝利!

下面來看乙個簡單的示例:

server.cpp

#include #include 

using

namespace

std;

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

//初始化socket資源

intinitialization()

return1;

}int

main()

socket socksvr;

sockaddr_in addrsvr;

//收發快遞,要保證我們有乙個收件人

socksvr = socket(af_inet, sock_stream, 0

);

//收件人可以選擇接受哪個地區發來的快遞

addrsvr.sin_addr.s_un.s_addr =htonl(inaddr_any);

//收件人可以選擇接受哪種方式發來的快遞(udp/tcp)

addrsvr.sin_family =af_inet;

//收件人有乙個固定的房間(埠)收取快遞

addrsvr.sin_port = htons(6000

);

//將收件人的各種資訊告知快遞商

bind(socksvr, (sockaddr*)&addrsvr, sizeof

(sockaddr));

//快遞商留意收件人的快遞

listen(socksvr, 5

); std::cout

<< "

激動的等待遠方朋友的快遞...

"

(sockaddr);

char csendbuf[128] = ;

char crecvbuf[128] = ;

sockaddr_in addrclient;

//當有快遞到來,快遞商將包裹儲存於特定的位置

socket sockclient = accept(socksvr, (sockaddr*)&addrclient, &nlen);

//收件人從這個位置取到自己的包裹

int nrecvlen = recv(sockclient, crecvbuf, 128, 0

); cout

<< "

開心的取到了包裹:

"<< crecvbuf

);

//收件人根據寄件資訊,回覆

send(sockclient, csendbuf, strlen(csendbuf) + 1, 0

); closesocket(sockclient);

wsacleanup();

system(

"pause");

return0;

}

client.cpp

#include #include 

using

namespace

std;

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

//初始化socket資源

intinitialization()

return1;

}int

main()

socket sockclient;

sockaddr_in addrsvr;

//收發快遞同樣需要乙個寄件人

sockclient = socket(af_inet, sock_stream, 0

);

//寄件人需要知道收件人的位址

addrsvr.sin_addr.s_un.s_addr = inet_addr("

127.0.0.1");

//寄件人需要知道收件人收取什麼郵寄方式的快遞

addrsvr.sin_family =af_inet;

//寄件人需要知道收件人在哪個房間收取快遞

addrsvr.sin_port = htons(6000

);

//快遞商通過寄件人給的資訊,檢查是否有誤

if (connect(sockclient, (sockaddr*)&addrsvr, sizeof(sockaddr)) ==socket_error)

char csendbuf[128] = "

hello!";

//將快遞根據收件人資訊傳送出去

send(sockclient, csendbuf, strlen(csendbuf) + 1, 0

);

char crecvbuf[128] = ;

recv(sockclient, crecvbuf,

128, 0

); cout

<< crecvbuf

"pause");

return0;

}

示例中,描述了socket網路程式設計基本的實現方式,從使用wsastartup選擇需要的socket版本,到socket的建立、位址和埠的選擇、協議的確定、接收和傳送函式等等。

後續的文章,將對此逐一進行詳細的講解。

網路程式設計(1) Socket收發

短連線 只進行一次收發就是短連線 長連線 傳送訊息後不關閉就是長連線,但會存在粘包等問題。接收 可以寫入乙個迴圈一直接收 trycatch exception e finally if outputstream null catch ioexception e catch exception e 沒...

c 網路程式設計(1)

一 epoll網路程式設計 select 和poll io多路復用模型 select的缺點 相比select模型,poll使用鍊錶儲存檔案描述符,因此沒有了監視檔案數量的限制,但其他三個缺點依然存在。在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有...

乙個demo學會c 程式設計

此demo主要包括三個檔案 namespace.h檔案,包含了自定義空間 空間函式 空間變數 空間自定義類 namespace.c檔案為namespace.h檔案中定義函式的實現 main.cpp檔案為主程式運算。namespace.h和namespace.cpp包含了自定義基 繼承類 模板類的定義...