基於UDP的多執行緒網路資料報收發測試程式

2021-07-09 10:30:17 字數 1708 閱讀 9711

這段程式同樣用來測試使用recvmmsg()與sendmmsg()後的丟包率,只不過這次用pthread_create()建立了4個執行緒,使用g++  client.c  -o  client  -lpthread編譯。由於第一次用pthread_create()函式,不是很熟悉,程式中有不足的地方還望指出。

檔案一:wrap.h

#ifndef _wrap_h_

#define _wrap_h

#ifndef __use_gnu

#define __use_gnu

#endif

#include #include #include #include #include #include #include #include #include #include #define datnum 100

#endif

檔案二:server.c

/* server.c */

#include "wrap.h"

#define serv_port 8000

#define num_threads 4 // 建立的執行緒數

unsigned long b = 0, a = 0;

void *recv_dat(void *args) // 執行緒處理函式

n = recvmmsg(sockfd, msgvec, datnum, 0, timeout);

if (n == -1)

else

}}int main(void)

}sleep(5); // 67~70行好像沒什麼用,因為程式來不到這裡

for(t = 0; t < num_threads; t++)

pthread_join(thread[t], null);

return exit_success;

}

檔案三:client.c

/* client.c */ 

#include "wrap.h"

#define serv_port 8000

int main(int argc, char *argv)

sockfd = socket(af_inet, sock_dgram, 0);

if (sockfd < 0)

bzero(&servaddr, sizeof(struct sockaddr_in));

bzero(msgvec, sizeof(msgvec));

bzero(dataiov, sizeof(dataiov));

servaddr.sin_family = af_inet;

inet_pton(af_inet, "127.0.0.1", &servaddr.sin_addr);

servaddr.sin_port = htons(serv_port);

for (i = 0, a = 0; i < atoi(argv[1]); i++)

n = sendmmsg(sockfd, msgvec, datnum, 0);

if (n == -1)

else a++;

// usleep(1);

}printf("send_num = %d\n", a);

return 0;

}

基於UDP的單執行緒網路點對點資料報收發測試程式

分享一段基於udp的單執行緒網路點對點資料報收發測試程式。這段程式我是用來測試使用recvmmsg 與sendmmsg 後的丟包率 這兩個函式的資訊可以man出來 使用g 編譯,程式中可能有不足的地方還望指出。檔案一 wrap.h ifndef wrap h define wrap h ifndef...

基於UDP的多執行緒網路通訊程式

分享一段基於udp的多執行緒網路點對點通訊程式。檔案一 ccomm.h ifndef ccomm h define ccomm h include include include include define socklen t int pragma comment lib,wsock32.lib ...

python 網路程式設計(udp資料報)

什麼是udp udp是乙個簡單的面向資料報的運輸層協議 程序的每個輸出操作都正好產生乙個udp資料報,並組裝成乙份待傳送的ip資料報。這與面向流字元的協議不同,如tcp,應用程式產生的全體資料與真正傳送的單個ip資料報可能沒有什麼聯絡。接收端是伺服器 server 傳送端是客戶機 client py...