C 網路程式設計

2021-10-23 03:37:15 字數 3693 閱讀 7311

一:介紹

1、什麼是tcp/ip?

tcp提供基於ip環境下的資料可靠性傳輸,

事先需要進行三次握手來確保資料傳輸的可靠性。

詳細的不再贅述,感興趣的朋友可以去search一下。

2、什麼是socket?

socket顧名思義就是套接字的意思,

用於描述位址和埠,是乙個通

信鏈的控制代碼。應用程式通過socket

向網路發出請求或者回應。

socket程式設計有三種:(1)流式套接字(sock_stream)

(2)資料報套接字(sock_dgram),

(3)原始套接字(sock_raw),前兩者較常用。

基於tcp的socket程式設計是流式套接字。

tcp/ip通訊中,主要是進行c/s互動。下面看看具體互動內容:

1: 服務端:

(1)建立socket -----> socket()

(2)繫結埠 ------> bind()

(3)監聽 --------> listen()

(4)等待client鏈結 ------> accept()

(5)接受資料 --------> recv()

(6)傳送資料 --------> send()

(7)關閉socket---------> closesocket()

2:客戶端:

(1)建立socket -----> socket()

(2)鏈結伺服器 -----> connect()

(3)傳送資料 --------> send()

(4)接受資料 --------> recv()

(5)關閉socket --------> closesocket()

1: 載入鏈結庫:

#pragma comment(lib,「ws2_32.lib」);

2: 建立網洛環境

word word = makeword(2,2); // 建立版本號

wsdata data;

wsastartup(word, &data);// 啟動網路環境

在程式最後要清除網路環境:wsacleanup();

int

main()

三:server端**:

#include

#include

#include

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

//載入鏈結庫

using

namespace std;

//使用命名空間std

intmain()

;//ipv4

_sin.sin_family = af_inet;

//埠號

_sin.sin_port =

htons

(4567);

//htons --> host to net unsigned short

//繫結到哪個位址。 (inaddr_ant本機的所有網路位址)

_sin.sin_addr.s_un.s_addr = inaddr_any;

//也可單個inet_addr("127.0.0.1")

if(socket_error ==

bind

(_sock,

(sockaddr*

)&_sin,

sizeof

(_sin)))

else

// 3 listen 監聽網路埠

if(socket_error ==

listen

(_sock,5)

)else

// 4 accept 等待接收客戶端連線

sockaddr_in clientaddr =

;int naddrlen =

sizeof

(clientaddr)

;

socket _csoke = invalid_socket;

//設定無效的socket

//無效socket 用於儲存新加入的客戶端

while

(true

)//inet_ntoa()將網路位址轉換成「.」點隔的字串格式

cout <<

"新客戶端加入: ip = "

<<

inet_ntoa

(clientaddr.sin_addr)

<< endl;

// 5 send 向客戶端傳送一條資料

char msgbuf=

"hello ,i'm server."

;//send(客戶端socket,要傳送的資料,要傳送多長,0);

//strlen()計算資料的大小,+1後給結束符留個地方

send

(_csoke, msgbuf,

strlen

(msgbuf)+1

,0);

}// 6 關閉套接字closesocket

closesocket

(_sock)

;//--------------------------------------

//清除網路環境

wsacleanup()

;}

四:客戶端**

#include

#include

#include

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

//載入鏈結庫

using

namespace std;

intmain()

else

// 2 鏈結伺服器 connect

sockaddr_in sin =

; sin.sin_family = af_inet;

sin.sin_port =

htons

(4567);

sin.sin_addr.s_un.s_addr =

inet_addr

("127.0.0.1");

int ret =

connect

(sock,

(sockaddr*

)&sin,

sizeof

(sin));

if(socket_error == ret)

else

// 3 接受伺服器資訊

//recbufi訊息緩衝區

char recbuf[

256]=;

int reclen =

recv

(sock, recbuf,

256,0)

;if(reclen >0)

// 4 關閉套接字closesocket

closesocket

(sock)

;//------------------

//清楚網路環境

C 網路程式設計

首先我們解釋一下在網路程式設計時候,經常遇到的幾個概念 同步 synchronous 非同步 asynchronous 阻塞 block 和非阻塞 unblock 所謂同步方式,就是傳送方傳送資料報以後,不等接受方響應,就接著傳送下乙個資料報。非同步方式就是當傳送方傳送乙個資料報以後,一直等到接受方...

C 網路程式設計

1 ip網路中的每台主機都有乙個ip位址 它是邏輯位址 網際網路上的ip位址具有全球唯一性 4個位元組,192.168.0.16 2 osi將網路分為 tcp ip模型 應用層 應用層 表示層會話層 傳輸層 傳輸層 網路層 網路層 資料鏈路層 網路介面 物理層相同層次之間不可以直接通訊,是虛擬通訊。...

c 網路程式設計

microsoft.framework為應用程式訪問inter 提供了分層的 可擴充套件的以及受管轄的網路服務,其名字空間system.和system.sockets包含豐富的類可以開發多種網路應用程式。類採用的分層結構允許應用程式在不同的控制級別上訪問網路,開發人員可以根據需要選擇針對不同的級別編...