C層實現多執行緒測網速

2021-06-18 06:18:15 字數 2829 閱讀 8067

可能這個程式有很多問題,所以請各位大嬸批評指正,勿噴!

server端:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define bufsize 1024

pthread_t thread[4];

double sock(int port) 

if(bind(server_sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0)

listen(server_sockfd,5);

sin_size=sizeof(struct sockaddr_in);

if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_addr,&sin_size))<0) 

printf("accept client %s   port%d\n",inet_ntoa(client_addr.sin_addr),port);

int buflen=128*1024;

setsockopt(client_sockfd,sol_socket,so_rcvbuf,(const char *)&buflen,sizeof(int));

unsigned long count=0;

unsigned int length;

clock_t start,finish;

start=clock();

while((length=recv(client_sockfd,buf,bufsize,0))>0)

count+=length;

}finish=clock();

printf("the total count of byte is %ld bytes\n",count);

double time=(double)(finish-start)/clocks_per_sec;

double v=(double)(count)/1024/time;

printf("v = %lf kb/s \n",v);

return v;

} double v1,v2,v3,v4;

void *thread1()

void *thread2()

void *thread3()

void *thread4()

void thread_create(void)

void thread_wait(void)

if(thread[1]!=0)

if(thread[3]!=0)

if(thread[4]!=0)

}int main()

client端:

#include

#include

#include

#include

#include

#include

#include

#define filename "/sdcard/ssss.***"

#define bufsize 1024

#define max 10

#define times 2500

pthread_t thread[4];

int port1=0,port2=0,port3=0,port4=0;

char* addr;

double sock(char* addr,char* port)

printf("create client socket\n");

int buflen=128*1024;

setsockopt(client_sockfd,sol_socket,so_sndbuf,(const char *)&buflen,sizeof(int));

if(connect(client_sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0)

printf("connected to server\n");

file* from_fd;

if((from_fd=fopen(filename,"r"))==-1)

int len=fread(buf,sizeof(char),bufsize,from_fd);

clock_t start,finish;

start=clock();

while(i--)

} finish=clock();

double time=(double)(finish-start)/clocks_per_sec;

double v=times/time;

printf("v = %lf kb/s \n",v);

return v;

}double v1,v2,v3,v4;

void *thread1()

void *thread2()

void *thread3()

void *thread4()

void thread_create(void)

void thread_wait(void)

if(thread[1]!=0)

if(thread[2]!=0)

if(thread[3]!=0)

}int main(int argc,char *argv)

另外有個小問題,sock函式返回double型別的時候,是不是會影響執行速度?

C 實現多執行緒

include include include std mutex display mutex 使用互斥鎖 void foo int i void multithread for int i 0 i 4 i std thread thread foo,i thread.detach 執行緒資源 分離...

c 實現多執行緒同步

執行緒同步是指同一程序中的多個執行緒互相協調工作從而達到一致性。之所以需要執行緒同步,是因為多個執行緒同時對乙個資料物件進行修改操作時,可能會對資料造成破壞,下面是多個執行緒同時修改同一資料造成破壞的例子 1 include 2 include 3 4void fun 1 unsigned int ...

C 多執行緒 實現示例

需求 在ros中,通過捕捉按鍵輸入完成飛機的模式切換,該方式比較適合多機一鍵起飛或者其他模式切換操作。簡單說明 採用的是c 標準庫提供的cin函式,但是這種方式為阻塞等待鍵盤按下,所以需要採用多執行緒或者多程序的方式,又採用了的是共享變數 標誌位 的想法,故在乙個程序中採用多執行緒即可。下面的示例給...