一:兩種模型:
對等模型
c/s模型
補充(來自網上對兩種通訊協議的理解):
tcp(transmission control protocol,傳輸控制協議)是基於連線的協議,也就是說,二: 對等模型 ------------一般採用udp通訊方式 優點:通訊簡單缺點: 多個使用者通訊時多有不變。在正式收發資料前,必須和對方建立可靠的連線。乙個tcp連線必須要經過三次「對話」才
能建立起來,其中的過程非常複雜,我們這裡只做簡單、形象的介紹,你只要做到能夠理
解這個過程即可。我們來看看這三次對話的簡單過程:主機a向主機b發出連線請求資料
包:「我想給你發資料,可以嗎?」,這是第一次對話;主機b向主機a傳送同意連線和要
求同步(同步就是兩台主機乙個在傳送,乙個在接收,協調工作)的資料報:「可以,你什麼
時候發?」,這是第二次對話;主機a再發出乙個資料報確認主機b的要求同步:「我現在就
發,你接著吧!」,這是第三次對話。三次「對話」的目的是使資料報的傳送和接收同步,經
過三次「對話」之後,主機a才向主機b正式傳送資料。
udp(user data protocol,使用者資料報協議)是與tcp相對應的協議。它是面向非連線的協
議,它不與對方建立連線,而是直接就把資料報傳送過去!
udp適用於一次只傳送少量資料、對可靠性要求不高的應用環境。比如,我們經常使用「ping」命
令來測試兩台主機之間tcp/ip通訊是否正常,其實「ping」命令的原理就是向對方主機傳送udp資料報,
然後對方主機確認收到資料報,如果資料報是否到達的訊息及時反饋回來,那麼網路就是通的。例如,
在預設狀態下,一次「ping」操作傳送4個資料報(如圖2所示)。大家可以看到,傳送的資料報數量是4包,
收到的也是4包(因為對方主機收到後會發回乙個確認收到的資料報)。這充分說明了udp協議是面向非
連線的協議,沒有建立連線的過程。正因為udp協議沒有連線的過程,所以它的通訊效果高;但也正因
為如此,它的可靠性不如tcp協議高。qq就使用udp發訊息,因此有時會出現收不到訊息的情況。
1. 建立socket
int socket(int domain, // 協議族型別 af_unix, af_inet
int type, /// 支援資料格式:流sock_stream / 報文 sock_dgram
int protocol);// 支援的協議,建議為0
返回值:
成功: 返回檔案描述符
失敗: 返回-1
2. 繫結在位址上
int bind(int sockfd, /// socket描述符
const struct sockaddr *addr,/// 繫結位址
socklen_t addrlen);
3. 接收資料
read/write send/recv sendto/recvfrom
4. 關閉socket
/// socketa.c
#include #include #include #include #include #include main()
; addr.sun_family=af_unix;
memcpy(addr.sun_path,"my.sock",
strlen("my.sock"));
//3.把socket繫結在位址上
r=bind(fd,(struct sockaddr*)&addr,sizeof(addr));
if(r==-1) printf("bind err:%m\n"),exit(-1);
printf("位址繫結成功!\n");
//4.接收資料
bzero(buf,sizeof(buf));
r=read(fd,buf,sizeof(buf));
buf[r]=0;
printf("%s\n",buf);
//5.關閉
close(fd);
//6.刪除socket檔案
unlink("my.sock");
}
#include #include #include #include #include #include main()
; //1.建立socket
fd=socket(af_unix,sock_dgram,0);
//fd=socket(af_unix,sock_stream,0);
//2.連線到指定的位址
addr.sun_family=af_unix;
memcpy(addr.sun_path,"my.sock",
strlen("my.sock"));
r=connect(fd,(struct sockaddr*)&addr,
sizeof(addr));
//3.傳送資料
write(fd,"自強不息,知行合一!",
strlen("自強不息,知行合一!"));
//read(fd,buf,100);
// printf("%s\n",buf);
// sleep(1);
//4.關閉
close(fd);
}
基於socket的檔案傳輸協議
1 我們先搭建乙個乙個伺服器與客戶機並使他們進行通訊 2 在客戶機中對輸入的指令進行判斷,將指令轉化成對應的列舉型別傳送給服務機 3 服務機對傳送過來的ftp cmd的值進行判斷,並執行相對應的功能 4 ls功能的實現 通過popen實現,獲取內容傳送客戶機並顯示 get 對指令進行分割,讀取分割後...
基於socket實現大檔案上傳
import socket 1.客戶端 操作流程 先拿到檔案 獲取檔案大小 建立字典 1.製作表頭 header 如何得到 他是乙個二進位制字串 序列化得到 字典字串 轉成二進位制字串 header bytes 打包 header len struct.pack i len header bytes...
基於Socket的檔案傳輸(使用CSocket類)
本軟體使用 mfc採用物件導向的方法實現了基於 socket 的檔案傳輸。這是原來研究生課程的結課作業,實現了socket的傳送和接收,以及讀取ini配置檔案等操作。使用了csocket類 以下是當時結課作業 的正文 一 軟體特點如下 1.採用了多執行緒的方法,檔案傳輸時使用 afxbeginthr...