一、定義數據結構,初始化系統環境
1、定義數據結構
struct message{
int type; //傳輸類型
long length; //傳輸內容的長度
char *value; //傳輸內容
};
2、創建兩個信號量sme1,sem2,都設置初值爲0;
二、定義數據變量
struct sockaddr_in addrSrv;
struct sockaddr_in addrClient1; //客戶1的地址
struct sockaddr_in addrClient2; //客戶2的地址
三、初始化服務器端的地址,創建tcp協議的套接字
int sockSrv=socket();
addrSrv.sin_addr.s_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(8000);
四、綁定服務器端的地址
bind(sockSrv,(struct sockaddr*)&addrSrv,sizeof(struct sockaddr));
五、開始監聽
1. 接受一個客戶端1的連接,無阻塞方式等待連接
2. 判斷另一個客戶端2是否成功連接
(1)成功:開始通信,通知另一客戶端通信類型
(2)不成功:提示客戶端1不在線,暫時不能通信
六、 創建一個子進程 ,一個處理客戶端1到客戶端2的通信,另一個處理客戶端2到客戶端的通信
1.父進程(pid>0):處理客戶端1到客戶端2的通信
(1)sem1 +1,第一個連接接收到客戶端1的數據,通知服務器
(2)將接收到的數據發送給客戶端2,sme1 -1等待下一條數據的到來
1.子進程(pid==0):處理客戶端2到客戶端1的通信
(1)sem1 +2,第一個連接接收到客戶端1的數據,通知服務器
(2)將接收到的數據發送給客戶端2,sme2 -1等待下一條數據的到來