C 網路程式設計

2021-05-23 17:37:30 字數 3987 閱讀 8024

1、ip網路中的每台主機都有乙個ip位址;

它是邏輯位址;

網際網路上的ip位址具有全球唯一性;

4個位元組,192.168.0.16

2、osi將網路分為     tcp/ip模型

應用層            應用層

表示層會話層

傳輸層            傳輸層

網路層            網路層

資料鏈路層        網路介面

物理層相同層次之間不可以直接通訊,是虛擬通訊。下層向上層提供服務,實際通訊在最底層完成。各層之

af_inet網際域.

6、在網路協議中需要指定網路位元組順序,tcp/ip使用16位整數和32位整數的高位先存格式,pc機採用的

是低位先存格式。

套接字:流式套接字(基於tcp)、資料報套接字(基於udp),原始套接字。

7、基於tcp的socket程式設計

伺服器端程式:

建立套接字;

將套接字繫結到乙個本地位址和埠上bind

將套接字設為監聽模式,準備接受客戶請求listen

等待客戶請求,當請求到來,返回乙個新的對應於此次連線的套接字accept

用返回的套接字和客戶端進行通訊send/recv。

返回,等待另一客戶的請求。

關閉套接字。

客戶端程式:

建立套接字;

向伺服器傳送連線請求connect

和伺服器進行通訊send/recv

關閉套接字。

8、基於udp的socket程式設計

伺服器端(接收端)程式:

建立套接字

繫結套接字到本地位址和埠上bind

等待接受資料recvfrom

關閉套接字

客戶端(傳送端)程式:

建立套接字

傳送資料sendto

關閉套接字

9、alt+f8實現**的整齊。

10、127.0.0.1是迴路位址。可以在同一臺機子上通訊。

11、將兩個工程新增到乙個工作區中,在工作區中點右鍵"新增工程"。取消"編譯微型條",選中"組建".

12、基於tcp/ip的socket**:

/*server.cpp*/

#include

#include

void main()

if ( lobyte( wsadata.wversion ) != 2 ||

hibyte( wsadata.wversion ) != 2 )

//1、建立套接字

socket socksrv=socket(af_inet,sock_stream,0);

/*第乙個引數對於tcp/ip協議的套接字,只能是af_inet或pf_inet,第二個引數對於

1.1版本的socket,只支援兩種型別的套接字,sock_stream指定產生流式套接字,

sock_dgram產生資料報套接字,第三個引數為零時自動選擇合適的協議。*/

//2、繫結套接字到乙個本地位址和埠上

sockaddr_in addsrv;

//htonl是把u_long型別轉換為網路位元組序

//htons是把u_short型別轉換為網路位元組序

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

addsrv.sin_family=af_inet;

//unsigned   short   sin_port;

addsrv.sin_port=htons(4000);

bind(socksrv,(sockaddr*)&addsrv,sizeof(sockaddr));

//3、將套接字設為監聽模式,準備接受客戶請求

listen(socksrv,5);

sockaddr_in addclient;

int len=sizeof(sockaddr);

while(1)

}/*client.cpp*/

#include

#include

void main()

//1、建立套接字

socket sockclient=socket(af_inet,sock_stream,0);

//2、向伺服器傳送連線請求

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");//設定socket的ip為本機。

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(4000);//埠為4000,服務端和客戶端的埠一定要相同.否則是連不

上的connect(sockclient,(sockaddr*)&addrsrv,sizeof(sockaddr));//根據addrsrv連線服務端

//3、和伺服器進行通訊

char recvbuf[100];

recv(sockclient,recvbuf,100,0);//接收100字元

printf("%s/n",recvbuf);        //顯示

send(sockclient,"hello",strlen("hello")+1,0);    //傳送乙個hello

//4、關閉套接字

closesocket(sockclient);            //關閉

wsacleanup();                        //清理

}13、基於udp/ip的socket**:

/*server.cpp*/

#include

#include

void main()

if ( lobyte( wsadata.wversion ) != 2 ||

hibyte( wsadata.wversion ) != 2 )

socket socksrv=socket(af_inet,sock_dgram,0);

sockaddr_in addrsrv;

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

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(4001);

bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr));

sockaddr_in addrclient;

int len=sizeof(sockaddr);

char recvbuf[50];

recvfrom(socksrv,recvbuf,50,0,(sockaddr*)&addrclient,&len);

printf("%s/n",recvbuf);

closesocket(socksrv);

wsacleanup();

}/*client.cpp*/

#include

#include

void main()

if ( lobyte( wsadata.wversion ) != 2 ||

hibyte( wsadata.wversion ) != 2 )

socket sockclient=socket(af_inet,sock_dgram,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(4001);

sendto(sockclient,"hello",strlen("hello")+1,0,

(sockaddr*)&addrsrv,sizeof(sockaddr));

closesocket(sockclient);

wsacleanup();

}qq一般都是8080埠或者4000埠 

C 網路程式設計

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

c 網路程式設計

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

c 網路程式設計

客戶端 client.cpp include stdafx.h include include include using namespace std pragma comment lib,ws2 32.lib 接收資料 void receive pvoid param buf bytes 0 co...