原创 15_2 msgsend()和msgrcev()

dm03_msgsend.c #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h

原创 15_ipc中的消息隊列

消息隊列  消息隊列提供了一個從一個進程向另外一個進程發送一塊數據的方法  每個數據塊都被認爲是有一個類型,接收者進程接收的數據塊可以有不同的類型值  消息隊列也有管道一樣的不足,就是每個消息的最大長度是有上限的(MSGMAX)

原创 15_1msgctl的使用

#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <err

原创 14_udp基礎知識

1. UDP的特點  無連接  基於消息的數據傳輸服務  不可靠  一般情況下UDP更加高效  不粘包但丟包 UDP客戶/服務基本模型 - UDP注意點  UDP報文可能會丟失、重複  UDP報文可能會亂序  UDP

原创 12、close與shutdown區別

 close終止了數據傳送的兩個方向。  shutdown可以有選擇的終止某個方向的數據傳送或者終止數據傳送的兩個方向。  shutdown how=1就可以保證對等方接收到一個EOF字符,而不管其他進程是否已經打開了套接字。

原创 11SIGPIPE信號

如果對方socket已關閉,對等方再發寫數據,則會產生SIGPIPE信號  SIGPIPE信號會讓進程終止(man 7 signal,閱讀SIGPIPE默認ACT)  往一個已經接收FIN的套接中寫是允許的,接收到FIN僅僅代表

原创 13五種I/O模型

阻塞I/O 說明1:當上層應用app1調用recv系統調用時,如果對等方沒有發送數據(緩衝區沒有數據),上層應用app1將阻塞(默認行爲,被linux內核阻塞); 說明2:當對等方發送了數據,linux內核recv端緩衝區,有數據

原创 08包尾加上\n編程實踐-readline與recv的結合使用

\n作爲協議的邊界  ssize_t recv(int s, void *buf, size_t len, int flags);  與read相比,只能用於套接字文件描述符;  多了一個flags MSG_OOB

原创 07tcp粘包的原因以及處理的方法,網絡三大編程函數的使用

說明 tcp 字節流 無邊界 udp 消息、數據報 有邊界 對等方,一次讀操作,不能保證完全把消息讀完。 對方接受數據包的個數是不確定的。 產生粘包問題的原因 1、SQ_SNDBUF 套接字本身有緩衝區 (發送緩衝區、接受緩衝區

原创 03網絡編程基本模型及api的講解

TCP客戶/服務器模型 socket socket函數  包含頭文件<sys/socket.h>  功能:創建一個套接字用於通信  原型  int socket(int domain, int type, int pro

原创 09服務器多進程併發子進程退出問題-解決殭屍進程的方法

11multi_client.c #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/socket.h> #include <sys

原创 05多進程間使用信號進行通信

#include <stdlib.h> #include <string.h> #include <signal.h> #include <unistd.h> #include <stdio.h> #include <sys/ipc.

原创 06點對點通信

注意要點: (1)父子進程共享文件描述符,注意各自的職責 (2)注意避免殭屍進程的產生 (3)信號處理就是軟中斷 5p2pclient.c #include <stdio.h> #include <string.h> #includ

原创 02網絡基本概念

1、socket基本概念 什麼是socket?  socket可以看成是用戶進程與內核網絡協議棧的編程接口。  socket不僅可以用於本機的進程間通信,還可以用於網絡上不同主機的進程間通信。 IPv4套接口地址結構  I