Linux多執行緒網路程式設計(一)

2021-07-08 15:46:54 字數 1476 閱讀 5388

再次開始網路程式設計已經是乙個學期之後了。

上個學期完成網路程式設計之後還沒有來得及總結,最近重新開始網路程式設計還遇到了不少的麻煩。

直奔主題:

在伺服器端實現的功能:1.

通過tcp/ip

協議,獲取客戶端傳送的檔案。

2.定義了幾個簡單的指令,對客戶端進行控制。

功能特點:能同時處理最多五個客戶端的請求。

伺服器端的程式設計:

在開啟網路的時候,我們首先要約定好網路協議以及伺服器端開啟的埠。

#include 

#include 

#include 

#include 

struct sockaddr_in serv_addr; //乙個包含伺服器端資訊的結構體

struct sockaddr_in clnt_addr; //客戶端的結構體

int init_networking(int port)

#include //包含對執行緒函式的定義

主函式:初始化網路,對每個接入伺服器的客戶端開啟乙個執行緒進行相應的處理。

int main(void)

close(server_sock);

return 0; }

處理客戶端的請求:

一旦客戶端連線上伺服器,客戶端會向伺服器傳送乙個對應的連線模式(控制模式or

傳輸模式)

void accept_request(int client_sock)

} if(mode_select==2)

} 傳輸和控制函式在此不做詳細的解釋,因為它的通用性不強,主要是對檔案的資料報的組裝,以及傳輸相應的控制指令讓客戶端有相應的應答。

客戶端的設計主要思路:

1.使用兩套套接字,一套套接字用於檔案傳輸,另一套套接字用於控制指令傳輸。

2.在主函式中建立乙個控制線程,執行緒的生命週期和主函式一樣,這樣能夠實時的控制主函式。

3.程序和執行緒的通訊使用全域性變數的方式

特點:

使用兩套套接字的好處就是能夠將傳輸資料和控制指令隔離開,能夠相互不影響,降低出錯的概率。

客戶端的實現:

#include 

#include 

#include 

#include 

#include 

int serv_sock,serv_sock2;

int init_convert(const char *ip_addr,int port)

主函式中開啟了乙個執行緒,直到主函式程序結束才結束。這樣我們就能在程式的生命週期內對程式進行實時的控制。

pthread_t cmd_thread;

if(pthread_create(&cmd_thread , null,cmd_convert,null) != 0)

perror("pthread_create");

這個程序用於傳輸控制指令,控制指令與主函式的通訊方式,採用全域性變數的方式。

Linux網路程式設計 多執行緒

首先多執行緒是在乙個程序內建立出多個執行緒的模型,也就是多個執行緒共用乙個程序中的資源,來實現對乙個程序中的多個事務進行處理的模型。主線程就是通過main函式進入的執行緒,由主線程呼叫pthread create 建立的執行緒均稱為子執行緒,每個執行緒都有自己的執行緒id,可以通過pthread s...

Linux 多執行緒程式設計(一)

1 建立執行緒 有乙個比較特殊的執行緒,就是主線程或者稱為初始執行緒,它是當乙個程序被建立時建立的。而其他執行緒則是在初始執行緒中呼叫pthread create建立的。建立的新執行緒初始為ready狀態,等待處理器排程。2 執行執行緒 執行緒被建立後,就會執行phtread create的star...

多執行緒網路程式設計

與多程序程式設計對比 1 建立多程序相比起建立多執行緒會 消耗大量的系統資源 2 程序結束比起執行緒結束,釋放的資源也更多,子程序很快結束,系統負擔加重 3.多執行緒由於在同乙個程序中,很多資源是共用的。所以執行緒間資料共享也非常高效快捷。需要注意的兩點是 1.由於多執行緒在乙個程序中,乙個程序只有...