-
網(wǎng)絡(luò)編程第一天
從今天開始講網(wǎng)絡(luò)編程,為期一周,今天講的主要內(nèi)容是socket,也是本周的重點(diǎn),老師留的兩道題目就第二題有難度,第一題不是很難,和例題很像,就是不知道能不能寫出來.上周已經(jīng)連續(xù)兩天沒有寫出來老師留的作業(yè)了,今天再寫不出來可能就要留到下個(gè)班級了,而且項(xiàng)目也已經(jīng)進(jìn)行到第三周了,這周五之前再完不成就直接留級到下個(gè)班級重修了,否則這周學(xué)完還是要做新項(xiàng)目,到時(shí)會跟不上的,只會越托越多。(從網(wǎng)上找到了一篇socket通信原理的文章http://www.cnblogs.com/fuchongjundream/p/3914696.html,是以c++為例講解的)
一、什么是互聯(lián)網(wǎng)?(internet)
網(wǎng)網(wǎng)相聯(lián)
廣義的概念,有很多互聯(lián)網(wǎng)
二、因特網(wǎng)(Internet)
是現(xiàn)存所有互聯(lián)網(wǎng)中被老百姓使用最為頻繁的
三、網(wǎng)絡(luò)的作用:
1. 共享內(nèi)容
2. 傳遞消息
3. 提供計(jì)算(云計(jì)算)
四、通信基礎(chǔ)
1. 電路交換
2. 報(bào)文交換
3. 分組交換
通信分類:
1. 單工通信
2. 半雙工通信
3. 全雙工通信
五、網(wǎng)絡(luò)編程(因特網(wǎng)):
1. 如何標(biāo)識因特網(wǎng)上不同的電腦(IP地址):
IP地址的表示方式:(ifconfig)
a. 點(diǎn)分十進(jìn)制字符串: "192.168.1.1",每個(gè)十進(jìn)制數(shù)取值范圍:0~255
程序員習(xí)慣使用的
b. 四字節(jié)整數(shù):(網(wǎng)絡(luò)傳輸時(shí)采用的)
inet_ntoa
inet_aton
c. 域名(domain name ):www.baidu.com 老百姓
域名服務(wù):gethostbyname
2. 如何標(biāo)識同一臺電腦上的不同進(jìn)程(端口號):
unsigned short
1~1023:知名網(wǎng)絡(luò)服務(wù)進(jìn)程 如: 80-網(wǎng)頁服務(wù) 23-文件服務(wù)
>= 1024:系統(tǒng)動態(tài)使用的
3. 如何標(biāo)識局域網(wǎng)上不同的電腦(即區(qū)分不同的網(wǎng)卡):
(硬件地址 MAC地址):
a. 冒號分的六個(gè)十六進(jìn)制數(shù)(0~0xff)組成的字符串:
"60:6c:66:03:68:c6"
b. 六字節(jié)的整型數(shù)
4. 協(xié)議(Protocol)
任何形式的通信雙發(fā)必須遵循統(tǒng)一的規(guī)則,這些規(guī)則也稱協(xié)議。
網(wǎng)絡(luò)通信的本質(zhì)就是通過各種傳輸介質(zhì)傳輸二進(jìn)制位,而用協(xié)議來描述這些二進(jìn)制位的作用與含義。
不同的互聯(lián)網(wǎng)采用的協(xié)議是不一樣的,因特網(wǎng)這個(gè)互聯(lián)網(wǎng)采用的協(xié)議為TCP/IP協(xié)議族(棧).
ISO: OSI七層模型
TCP/IP:五層模型
應(yīng)用層:業(yè)務(wù)數(shù)據(jù)
傳輸層:進(jìn)程和進(jìn)程之間的傳輸(TCP)
網(wǎng)絡(luò)層:電腦到電腦之間的傳輸(IP)
數(shù)據(jù)鏈路層:同一局域網(wǎng)網(wǎng)卡到網(wǎng)卡
物理層:電纜傳輸
PDU:Protocol Data Unit
5. 傳輸層的使用
TCP(重中之重): 面向連接 可靠的
UDP:非面向連接 不可靠的
6. 應(yīng)用層的業(yè)務(wù)邏輯:
應(yīng)用層協(xié)議:
a. 別人已經(jīng)制定好:http ftp smtp pop3 imap4
b. 自定義協(xié)議:
7. C/S:Client/Server 客戶端/服務(wù)端
B/S:網(wǎng)頁客戶端(瀏覽器) / 網(wǎng)頁服務(wù)器進(jìn)程
8. 基于TCP的C/S形式的網(wǎng)絡(luò)編程
socket(套接字):插頭 插孔 插排
客戶端的Socket:插頭
服務(wù)端則有兩種Socket:
a. 提供插孔的插排
b. 提供服務(wù)的插孔
這三種Socket,都必須具備如下條件才可以發(fā)送或接收數(shù)據(jù):
1). 本方的地址(自己的IP地址,自己的端口號)
2). 對方的地址(對方的IP地址,對方的端口號)
客戶端代碼模板:
sockfd = socket(...)//socket描述符
connect(...);
read/write/send/recv
close(sockfd);
服務(wù)端代碼模板:
sockfd = socket(...);
bind(....);
listen(....);//sockfd稱為插排
while(1)
{
clifd = accept(....);//clifd插孔
.....
close(clifd);
}
close(sockfd)
9. 字節(jié)序
unsigned int x = 0x12345678;
小端字節(jié)序(little endian):低位數(shù)字放在低地址
大端字節(jié)序(big endian):低位數(shù)字放在高地址
為了統(tǒng)一,業(yè)界將網(wǎng)絡(luò)字節(jié)序確定為大端字節(jié)序
六、作業(yè):
1. 客戶端發(fā)送一個(gè)學(xué)生數(shù)據(jù)(姓名、學(xué)號、三門功課成績)給服務(wù)器,服務(wù)器返回該學(xué)生學(xué)科成績的總分
2. 編寫函數(shù)完成將4字節(jié)的整型轉(zhuǎn)換成點(diǎn)分十進(jìn)制字符串形式的IP地址