一:介紹
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包含豐富的類可以開發多種網路應用程式。類採用的分層結構允許應用程式在不同的控制級別上訪問網路,開發人員可以根據需要選擇針對不同的級別編...