Socket程式設計步驟(筆試題)

2021-08-20 21:36:16 字數 1095 閱讀 2724

問:socket程式設計執行send之後系統進行哪種操作?

答:如果採用系統是採用阻塞模式,則系統執行send之後會等待對方返回結果才執行下一步。如果是非阻塞模式則將當前執行緒掛起,執行系統下乙個操作。

問:什麼是粘包?

答:出現粘包現象的原因是多方面的,它既可能由傳送方造成,也可能由接收方造成。

傳送方引起的粘包是由tcp協議本身造成的,tcp為提高傳輸效率,傳送方往往要收集到足夠多的資料後才傳送一包資料。若連續幾次傳送的資料都很少,通常tcp會根據優化演算法把這些資料合成一包後一次傳送出去,這樣接收方就收到了粘包資料。接收方引起的粘包是由於接收方使用者程序不及時接收資料,從而導致粘包現象。這是因為接收方先把收到的資料放在系統接收緩衝區,使用者程序從該緩衝區取資料,若下一包資料到達時前一包資料尚未被使用者程序取走,則下一包資料放到系統接收緩衝區時就接到前一包資料之後,而使用者程序根據預先設定的緩衝區大小從系統接收緩衝區取資料,這樣就一次取到了多包資料.

sockets(套接字)程式設計有三種,流式套接字(sock_stream),資料報套接字(sock_dgram),原始套接字(sock_raw);基於tcp的socket程式設計是採用的流式套接字,udp為資料報套接字。

伺服器端程式設計的步驟:

1:載入套接字型檔,建立套接字(wsastartup()/socket());

3:將套接字設定為監聽模式等待連線請求(listen());

4:請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字(accept());

5:用返回的套接字和客戶端進行通訊(send()/recv());

6:返回,等待另一連線請求;

7:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。

客戶端程式設計的步驟:

1:載入套接字型檔,建立套接字(wsastartup()/socket());

2:向伺服器發出連線請求(connect());

3:和伺服器端進行通訊(send()/recv());

4:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。

參考:c++ socket程式設計步驟     

socket阻塞與非阻塞,同步與非同步、i/o模型    

Socket程式設計步驟

我還是先了解下socket的互動過程吧,轉賬了一篇文章,給自己做個筆記 sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於tcp的socket程式設計是採用的流式套接字。伺服器端程式設計的步驟 1 載入套...

程式設計筆試題

單向鍊錶的反轉是乙個經常被問到的乙個面試題,也是乙個非常基礎的問題。比如乙個鍊錶是這樣的 1 2 3 4 5 通過反轉後成為5 4 3 2 1。最容易想到的方法遍歷一遍鍊錶,利用乙個輔助指標,儲存遍歷過程中當前指標指向的下乙個元素,然後將當前節點元素的指標反轉後,利用已經儲存的指標往後面繼續遍歷。源...

vc下socket程式設計步驟

vc下網路程式設計需注意 1.加上鏈結檔案ws2 32.lib 2.標頭檔案包含 winsock.h 編寫步驟如下 sockets 套接字 程式設計有三種 流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於tcp的socket程式設計是採用的流...