#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--;
}
else
nSuccessNum++;
}
printf("Success Num: %d Failed Num: %d \n",nSuccessNum,nThreadNum-nSuccessNum);
while(true)
{
printf("Current Num: %d\n",nThreadCurNum);
sleep(2);
}
return 0;
}
Linux C基於Socket的多線程掃描程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.