#include <pthread.h>
#include <iostream>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <algorithm>
#include <iterator>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sstream>
const int THREAD_NUMBER=1000;
pthread_mutex_t mutex;
void* thread_function(void* args)
{
std::stringstream buf;
struct sockaddr_in* server_addr = (sockaddr_in*)args;
int my_socket = socket(AF_INET, SOCK_DGRAM, 0);
if (my_socket == -1)
{
perror("create socket failure");
pthread_exit(NULL);
}
char data[512];
bzero(data, sizeof(data));
snprintf(data, 512, "%ld", random());
buf<<"send data size is:"<<data<<std::endl;
if (sendto(my_socket, (void*)&data, sizeof(data), 0,(sockaddr*)server_addr, sizeof(sockaddr_in)) == -1)
{
perror("sendto data failure");
close(my_socket);
pthread_exit(NULL);
}
char buffer[1024];
struct sockaddr_in receive_addr;
socklen_t len = sizeof(sockaddr_in);
buf<<"wait for recvice data:";
std::size_t actual_len = recvfrom(my_socket, buffer, 1024, 0, (sockaddr*)&receive_addr, &len);
if (actual_len == -1)
{
perror("revcfrom data failure");
}
else
{
//buf<<std::endl<<pthread_self()<<"receive data:";
std::copy(buffer, buffer+actual_len, std::ostream_iterator<char>(buf));
buf<<std::endl<<std::endl;
}
pthread_mutex_lock(&mutex);
std::cout<<buf.str();
pthread_mutex_unlock(&mutex);
close(my_socket);
}
int main(int argc, char* argv[])
{
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(1120);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
srand((unsigned long)time(NULL));
pthread_t pt;
pthread_attr_t attr;
if (pthread_attr_init(&attr) != 0)
{
perror("pthread attr init failure");
return -1;
}
if (pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN*2) != 0)
{
perror("pthread attr set stack failure");
return -1;
}
if (pthread_mutex_init(&mutex, NULL) != 0)
{
perror("pthread mutex init failuer");
return -1;
}
for (int i=0; i<THREAD_NUMBER; i++)
{
if (pthread_create(&pt, &attr, &thread_function, (void*)&server_addr) != 0)
{
perror("create thread fialure");
break;
}
}
getchar();
pthread_mutex_destroy(&mutex);
std::cout<<"client exit"<<std::endl;
}
#include <iostream>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <algorithm>
#include <iterator>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sstream>
const int THREAD_NUMBER=1000;
pthread_mutex_t mutex;
void* thread_function(void* args)
{
std::stringstream buf;
struct sockaddr_in* server_addr = (sockaddr_in*)args;
int my_socket = socket(AF_INET, SOCK_DGRAM, 0);
if (my_socket == -1)
{
perror("create socket failure");
pthread_exit(NULL);
}
char data[512];
bzero(data, sizeof(data));
snprintf(data, 512, "%ld", random());
buf<<"send data size is:"<<data<<std::endl;
if (sendto(my_socket, (void*)&data, sizeof(data), 0,(sockaddr*)server_addr, sizeof(sockaddr_in)) == -1)
{
perror("sendto data failure");
close(my_socket);
pthread_exit(NULL);
}
char buffer[1024];
struct sockaddr_in receive_addr;
socklen_t len = sizeof(sockaddr_in);
buf<<"wait for recvice data:";
std::size_t actual_len = recvfrom(my_socket, buffer, 1024, 0, (sockaddr*)&receive_addr, &len);
if (actual_len == -1)
{
perror("revcfrom data failure");
}
else
{
//buf<<std::endl<<pthread_self()<<"receive data:";
std::copy(buffer, buffer+actual_len, std::ostream_iterator<char>(buf));
buf<<std::endl<<std::endl;
}
pthread_mutex_lock(&mutex);
std::cout<<buf.str();
pthread_mutex_unlock(&mutex);
close(my_socket);
}
int main(int argc, char* argv[])
{
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(1120);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
srand((unsigned long)time(NULL));
pthread_t pt;
pthread_attr_t attr;
if (pthread_attr_init(&attr) != 0)
{
perror("pthread attr init failure");
return -1;
}
if (pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN*2) != 0)
{
perror("pthread attr set stack failure");
return -1;
}
if (pthread_mutex_init(&mutex, NULL) != 0)
{
perror("pthread mutex init failuer");
return -1;
}
for (int i=0; i<THREAD_NUMBER; i++)
{
if (pthread_create(&pt, &attr, &thread_function, (void*)&server_addr) != 0)
{
perror("create thread fialure");
break;
}
}
getchar();
pthread_mutex_destroy(&mutex);
std::cout<<"client exit"<<std::endl;
}