Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <errno.h>
- #include <string.h>
- #include <netdb.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <cstdio>
- #include <vector>
- #include <pthread.h>
- #include <iostream>
- #include <signal.h>
- #include <sys/select.h>
- #include <sys/time.h>
- #include <time.h>
- using namespace std;
- #define PORTOS 8889
- #define SERWER_IP "127.0.0.1"
- #define MSG_LENGTH 512
- int max_new_connect,activity;
- struct arg
- {
- int ile;
- bool zamknac;
- }my_arg;
- void handler(int signal)
- {
- my_arg.zamknac = 1;
- return;
- }
- void *threads_connection(void * emma)
- {
- char msg[MSG_LENGTH];
- struct arg *my_arg;
- my_arg = (struct arg *)emma;
- int polaczenie,read_size;
- polaczenie = my_arg->ile;
- fd_set rfds;
- struct timeval tv;
- int retval,maxfd;
- FD_ZERO(&rfds);
- FD_SET(polaczenie,&rfds);
- tv.tv_sec = 5;
- tv.tv_usec = 0;
- maxfd = polaczenie;
- cout<<"polaczenie: "<<polaczenie<<endl;
- //dajmy tutaj wynik dzialania selecta
- //retval = select(maxfd+1,&rfds,NULL,NULL,&tv);
- while((retval = select(maxfd+1,&rfds,NULL,NULL,&tv))>=0 && my_arg->zamknac!=1 )
- {
- if(retval>0)
- {
- read_size = recv(polaczenie,msg,512,0);
- write(polaczenie,msg,read_size);
- memset(msg,'\0',sizeof(msg));
- }
- if(read_size == 0 && retval > 0) // tutaj podac dane clientra do wiswietlenia
- {
- puts("Client disconnected");
- fflush(stdout);
- }
- else if(read_size==-1)
- {
- perror("recv failed**");
- }
- tv.tv_sec = 5;
- //retval=0;
- }
- if(retval<0)
- cout<<"mam jakis blad selecta"<<endl;
- if(my_arg->zamknac==1)
- {
- cout<<"wszedlem do break"<<endl;
- close(polaczenie);
- pthread_exit((void *)retval);
- }
- cout<<"tutaj juz mnie nie ma"<<endl;
- close(polaczenie);
- return NULL;
- }
- int main()
- {
- struct sockaddr_in server_addr;
- socklen_t laddr_len;
- pthread_t thread1;
- my_arg.zamknac=0;
- int new_connect =0;
- int my_socket_server,result;
- int iret1;
- struct sigaction sa;
- sa.sa_handler = handler;
- sigfillset(&(sa.sa_mask));
- sa.sa_flags=0;
- sigaction(SIGINT,&sa,0);
- if((my_socket_server= socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0)
- {
- perror("socket error! ");
- return 1;
- }
- memset(&server_addr,0,sizeof(struct sockaddr));
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(PORTOS);
- server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- if((result = bind(my_socket_server, (struct sockaddr*)&server_addr,sizeof(struct sockaddr)))<0)
- {
- close(my_socket_server);
- perror("Bind eRroR");
- return 1;
- }
- if(( result = listen(my_socket_server,5))<0)
- {
- perror("listen error");
- return 1;
- }
- laddr_len = sizeof(struct sockaddr);
- while(1)
- {
- cout<<"tu jestem 0"<<endl;
- while((new_connect=accept(my_socket_server, (struct sockaddr*)&server_addr,&laddr_len))==0);
- printf("tu jestem1");
- my_arg.ile = new_connect;
- iret1 = pthread_create(&thread1,NULL,threads_connection,(void *)&my_arg);
- if(iret1)
- {
- fprintf(stderr,"Error - pthread_create return code : %d\n",iret1);
- exit(EXIT_FAILURE);
- }
- printf("mamy nowego uzytkownika!!\n");
- new_connect =0;
- }
- close(new_connect);
- close(my_socket_server);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement