C/C++網(wǎng)絡(luò)編程,從socket到epoll

網(wǎng)絡(luò)編程重要性

基于Linux平臺(tái)
學(xué)習(xí)方法

socket概念

把socket理解為插座,電流(數(shù)據(jù))在電路(通道)中在不同的電腦上流動(dòng)
分類(lèi)

基于TCP:流socket,有序、可靠
基于UDP:數(shù)據(jù)報(bào)socket,高效,不可靠(QQ、微信語(yǔ)音聊天)
socket通信流程

客戶(hù)/服務(wù)端模式
客戶(hù)端運(yùn)行需要一個(gè)參數(shù)(可以和視頻的一樣)

過(guò)程:服務(wù)端相當(dāng)于你的電話,服務(wù)端啟動(dòng)之后處于待機(jī),客戶(hù)端啟動(dòng)之后就建立了通道,進(jìn)行報(bào)文的收發(fā)
問(wèn)題1:為什么我的客戶(hù)端寫(xiě)的是127.0.0.2,服務(wù)端依然顯示client(127.0.0.1)connected!

服務(wù)端程序
1、創(chuàng)建流式socket

2、指定用于通信的ip地址和端口

3、把socket設(shè)置成監(jiān)聽(tīng)模式(服務(wù)端需要等待客戶(hù)端的連接)

4、接受客戶(hù)端的連接(通道建立起來(lái)了)

客戶(hù)端
1、創(chuàng)建socket

2、向服務(wù)端發(fā)送請(qǐng)求

3、客戶(hù)發(fā)送/接受數(shù)據(jù)

服務(wù)端準(zhǔn)備buffer,接受客戶(hù)端報(bào)文

接收到后,在buffer里放一個(gè)OK,再把ok發(fā)給客戶(hù)端

使用自己局域網(wǎng)IP地址

需要用2個(gè)以上的虛擬機(jī)(網(wǎng)絡(luò)通信)
132虛擬機(jī)運(yùn)行服務(wù)器

客戶(hù)端在134虛擬機(jī)運(yùn)行

沒(méi)有路由:原因:防火墻132服務(wù)器

防火墻的配置
客戶(hù)服務(wù)端程序

注意事項(xiàng)

socket函數(shù)的參數(shù)

gdb設(shè)置參數(shù)
服務(wù)端
ahau@ahau-virtual-machine:~/socket$ gdb server
(gdb) set args 5005
(gdb) b 23
客戶(hù)端
ahau@ahau-virtual-machine:~/socket$ gdb client
(gdb) set args 192.168.220.128 5005
(gdb) b 23(客戶(hù)端和服務(wù)端一樣停留在23行)
運(yùn)行服務(wù)端

IP地址

一個(gè)服務(wù)器兩個(gè)網(wǎng)卡

5005端口通信

listen函數(shù)設(shè)置監(jiān)聽(tīng)模式

IP地址的重要性

客戶(hù)端什么時(shí)候connect