转载:socket通信基础
文章目錄
- 一、socket通信的概念
- 二、套接字(socket)
- 三、socket通信的過程
- 在這里插入圖片描述 四、客戶/服務端模式
- 服務端的工作流程
- 2、客戶端的工作流程
- 在這里插入圖片描述 五、注意事項
- 1、別去糾纏細節
- 2、服務端程序綁定地址
- 3、服務端程序綁定的通信端口
- 4、客戶端程序指定服務端的ip地址
- 5、客戶端程序指定服務端的通信端口
- 6、send函數
- 7、recv函數
- 8、服務端有兩個socket
- 9、程序退出時先關閉socket
- 六、相關的庫函數
- 1、socket函數
- 2、gethostbyname函數
- 3、connect函數
- 4、bind函數
- 5、listen函數
- 6、accept函數
- 7、函數小結
- 七、課后作業
- 八、版權聲明
各位兄弟,在學習Linux編程基礎之前,一定要先學習Linux基礎知識和計算機網絡基礎知識,如果對這兩方面的基礎知識和基本概念不熟,談不上Linux編程和網絡通信編程。
一、socket通信的概念
socket也稱作“套接字”,描述了計算機的IP地址和端口,運行在計算機中的程序之間采用socket進行數據通信。通信的兩端都有socket,它是一個通道,數據在兩個socket之間進行傳輸。
socket把復雜的TCP/IP協議族隱藏在socket接口后面,對程序員來說,只要用好socket相關的函數,就可以完成數據通信。
二、套接字(socket)
TCP提供了流(stream)和數據報(datagram)兩種通信機制,所以套接字也分為流套接字和數據報套接字。
流套接字的類型是SOCK_STREAM,它提供的是一個有序、可靠、雙向字節流的連接,因此發送的數據可以確保不會丟失、重復或亂序到達,而且它還有出錯后重新發送的機制(就像兩個人在打電話,聊天您一句我一句,有來有往,沒聽清楚就再說一次)。
數據報套接的類型是SOCK_DGRAM,它不需要建立和維持一個連接,采用UDP/IP協議實現。它對可以發送的數據的長度有限制,數據報作為一個單獨的網絡消息被傳輸,它可能會丟失、復制或錯亂到達,UDP不是一個可靠的協議,但是它的速度比較高,因為它不需要建立和維持連接(就像一個人向另一個人發短信,一條短信發出去,對方不一定能收到)。
在實際開發中,數據報套接字(即UDP)的應用場景極少,本章節只介紹流套接字。
三、socket通信的過程
1)服務端程序將一個套接字綁定到指定的ip地址和端口,并通過此套接字等待和監聽客戶的連接請求。
2)客戶程序向服務端程序綁定的地址和端口發出連接請求。
3)服務端接受連接請求。
4)客戶端和服務端通過讀寫套接字進行通信。
四、客戶/服務端模式
在TCP/IP網絡應用中,兩個程序之間通信模式是客戶/服務端模式(client/server),客戶/服務端也叫作客戶/服務器,各人習慣。
服務端的工作流程
1)創建服務端的socket。
2)把服務端用于通信的地址和端口綁定到socket上。
3)把socket設置為監聽模式。
4)接受客戶端的連接。
5)與客戶端通信,接收客戶端發過來的報文后,回復處理結果。
6)不斷的重復第5)步,直到客戶端斷開連接。
7)關閉socket,釋放資源。
服務端示例(book242.cpp)
/** 程序名:book242.cpp,此程序用于演示socket通信的服務端* 作者:C語言技術網(www.freecplus.net) 日期:20190525 */ #include <stdio.h> #include <string.h> #include <unistd.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h>總結
以上是生活随笔為你收集整理的转载:socket通信基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #转载:杨辉三角形实现过程详解-c语言基
- 下一篇: 学习笔记:二叉搜索树的验证