利用socket實現簡單的TCP網路程式。

2021-08-20 01:27:42 字數 2599 閱讀 2573

在我們編寫程式前,我們需要先了解tcp協議的特點。

在了解了tcp協議的特點後,我們就來實現乙個簡單的tcp網路程式。

在實現過程中,我們需要用到最重要的東西就是socket套接字。

socket:網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端就稱為乙個socket。socket本質是程式設計接     口,建立網路通訊連線至少要一對埠號,在網路中,我們用ip加埠號來表示網際網路中唯一乙個程序,所以socket就是ip位址加上埠號。

建立

函式原型:int socket(int domain,int type,int protocol);

type:指定socket型別。常用的socket型別有sock_stream、sock_dgram等。流式socket(sock_stream)是一種面向連 接的socket,針對於面向連線的tcp服務,資料報式socket(sock_dgram)是一種無連線的socket,對應於無連線的udp服務。

protocol:指定協議。常用協議有ipproto_tcp、ipproto_udp、ipproto_stcp等,分別對應tcp傳輸協議,udp傳輸協議和 stcp傳輸協議。

返回值:如果呼叫成功就返回新建立的套接字的描述符,如果失敗就返回invali_socket(linux下失敗返回-1)。

繫結

函式原型:int bind(socket socket,const struct sockaddr* address,socklen_t address_len);

socket:是乙個套接字描述符。

address_len:確定address緩衝區的長度。

返回值:成功返回0,否則返回socket_error。

接收

函式原型:int recvfrom(int socket,void buf,int len,unsigned int flags,struct socketaddr* from,socket_t* fromlen);

socket:標識乙個已連線套介面的描述字。

buf:用於接收資料的緩衝區。

len:緩衝區長度。

flags:呼叫操作方式。一般設定為0。    

fromlen:指向from緩衝區的長度。  

返回值:若無錯誤發生,返回讀入的位元組數。失敗返回-1。

傳送

函式原型:int sendto(socket socket,const char far* buf,int size,int flags,const struct sockaddr far* to,int tolen);

socket:套接字。

buf:待傳送資料的緩衝區。

size:緩衝區長度。

flags:呼叫方式標誌位,一般為0,改變flags,將會改變sendto傳送的形式。

返回值:如果成功,則返回傳送的位元組數,失敗則返回-1。

接收連線請求

int accept(int fd,struct socketaddr* addr,socklen_t* len);

fd:套接字描述符。

返回值:成功返回客戶端的檔案描述符,失敗返回-1。

在了解了所需要用的函式後,我們就來具體實現它。

//client(客戶端)

#include #include #include #include #include #include #include #include int main(int argc,char* argv)

write(sock,buf,sizeof(buf));

if(strncmp(buf,"quit",4)==0)

break;

read(sock,buf,sizeof(buf));

printf("server : $ %s\n",buf);

} close(sock);

return 0;

}

//server(伺服器端)

#include #include #include #include #include #include #include #include int main(int argc,char* argv)

else

write(newsock,buf,strlen(buf)+1);

} }close(sock);

return 0;

}

接下來我們來驗證程式是否可以成功執行,我們開啟兩個終端。執行輸入相同ip和埠號來測驗。

由圖我們能看到,兩個終端確實連線成功了,我們使用客戶端輸入資訊來測試。

伺服器端可以收到客戶端傳送的資訊,也可以對其內容進行回應,這就是乙個簡單的tcp網路程式,只要在相同區域網下的使用者都可以進行連線。

python3 5實現socket通訊 TCP)

tcp連線 tcp是面向連線的乙個協議,意味著,客戶端和伺服器開發傳送資料之前,需要先握手建立乙個tcp連線。tcp連線的一端與客戶端套接字相互聯絡,另一端與伺服器套接字相聯絡。當建立該tcp連線的時,我們需要講客戶端與伺服器的套接字位址 ip位址和埠號 關聯起來。使用建立的tcp連線,當一側要向另...

利用socket介面實現簡單的UDP網路程式。

上次我們進行了tcp網路簡單程式的實現,這次就來實現乙個udp的網路程式。要實現它我們依然要先了解它的特性。與tcp協議相同,udp協議也具有四個特點。client 客戶端 include include include include include include include include...

利用socket程式設計實現簡單的web伺服器

本博文主要利用socket 程式設計,實現簡單的web伺服器,客戶端能正常訪問這個伺服器 接收資訊,返回響應 file path self.parse request new client socket,ip port if file path file path index.html respon...