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...