Linux C基于Socket的多线程扫描程序

来源:互联网 发布:c5 aircross 知乎 编辑:程序博客网 时间:2024/06/08 07:01



#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <pthread.h>char strIP[20];int nPort=0;int nThreadNum=0;int nThreadCurNum=0;void* ProcessThreadProc(void *pPara){   struct sockaddr_in serverAddr;int clientSocket;char sendbuf[200];char recvbuf[200];if((clientSocket=socket(AF_INET,SOCK_STREAM,0)) < 0){nThreadCurNum--;perror( "socket error" );return NULL; }serverAddr.sin_family=AF_INET;serverAddr.sin_port=htons(nPort);serverAddr.sin_addr.s_addr=inet_addr(strIP);if(connect(clientSocket,( struct sockaddr * )&serverAddr,sizeof(serverAddr)) < 0){nThreadCurNum--;perror( "Connect error" );return NULL; }printf("Connect with destination host OK .....\n");while(1){sleep(1);}close(clientSocket);nThreadCurNum--;return NULL;}main(){int i = 0;int nFlag = 0;int nSuccessNum = 0;printf("Input IP:>");scanf("%s",strIP);printf("%s\n",strIP);printf("Input Port:>");scanf("%d",&nPort);printf("%d\n",nPort);printf("Input Thread NuM:>");scanf("%d",&nThreadNum);printf("%d\n",nThreadNum);nThreadCurNum = nThreadNum;for(i=0; i < nThreadNum; i++){pthread_t num;nFlag = pthread_create(&num, NULL, ProcessThreadProc, (void *)i);if(nFlag != 0){printf("Error: Thead Error [%d]....\n",i);nThreadCurNum--;}elsenSuccessNum++;}printf("Success Num: %d Failed Num: %d \n",nSuccessNum,nThreadNum-nSuccessNum);while(true){printf("Current Num: %d\n",nThreadCurNum);sleep(2);}return 0;}


0 0