2 #include <sys/socket.h>
5 #include <netinet/in.h>
11 /***************SERVER****************/
14 void *Receive(void *);
16 void *Timer_X(void *);
17 void *Timer_Y(void *);
18 int CreateSocket(int);
20 char instr
[5], sensors
[]="1000000000";
22 pthread_mutex_t simu_mutex
;
23 pthread_cond_t sensor_trigger
;
25 int main(int argc
, char *arcv
[])
27 int server_socket
, new_socket
, rc
;
29 pthread_t parser
, send
, receive
, timer_x
, timer_y
;
32 pthread_mutex_init(&simu_mutex
, NULL
);
33 pthread_cond_init (&sensor_trigger
, NULL
);
35 new_socket
= CreateSocket(server_socket
);
37 pthread_attr_init(&attr
);
38 pthread_attr_setdetachstate(&attr
, PTHREAD_CREATE_JOINABLE
);
40 rc
= pthread_create(&parser
, NULL
, Parser
, NULL
);
42 printf("ERROR; return code from pthread_create() parser is %d\n", rc
);
45 rc
= pthread_create(&send
, &attr
, Send
, (void *) new_socket
);
47 printf("ERROR; return code from pthread_create() send is %d\n", rc
);
50 rc
= pthread_create(&receive
, NULL
, Receive
, (void *) new_socket
);
52 printf("ERROR; return code from pthread_create() receive is %d\n", rc
);
55 rc
= pthread_create(&timer_x
, &attr
, Timer_X
, NULL
);
57 printf("ERROR; return code from pthread_create() timer_x is %d\n", rc
);
60 rc
= pthread_create(&timer_y
, &attr
, Timer_Y
, NULL
);
62 printf("ERROR; return code from pthread_create() timer_y is %d\n", rc
);
65 pthread_join(send
, NULL
);
66 pthread_join(timer_x
, NULL
);
67 pthread_join(timer_y
, NULL
);
74 printf("\n Server: close()...");
79 printf("\n Serverprogramm beendet\n\n");
82 pthread_attr_destroy(&attr
);
83 pthread_mutex_destroy(&simu_mutex
);
84 pthread_cond_destroy(&sensor_trigger
);
89 int CreateSocket(int server_socket
)
93 struct sockaddr_in serverinfo
, clientinfo
;
94 unsigned short int portnmbr
=5000;
95 char ip_addr
[]="127.0.0.1";
97 printf("\n Server: socket()...");
99 server_socket
= socket(AF_INET
, SOCK_STREAM
, 0);
100 serverinfo
.sin_family
= AF_INET
;
101 serverinfo
.sin_addr
.s_addr
= inet_addr(ip_addr
);
102 serverinfo
.sin_port
= htons(portnmbr
);
103 length
= sizeof(serverinfo
);
105 printf("\n Server: bind()...");
106 bind(server_socket
, (struct sockaddr
*)&serverinfo
, length
);
107 printf("\n Server: listen()...");
108 printf("\n Server mit IP %s", ip_addr
);
109 printf(" an Port %d wartet...", portnmbr
);
111 listen(server_socket
, 3);
112 printf("\n Server: accept()...");
113 new_socket
= accept(server_socket
,
114 (struct sockaddr
*)&clientinfo
, &length
);
116 printf("Verbindung mit %s", inet_ntoa(clientinfo
.sin_addr
));
121 void *Parser(void* arg
)
124 printf("\n<Parser> started");
128 scanf("%10s", input
);
130 if(strstr(input
, "test"))
131 printf("\nTesteingabe");
137 void *Receive(void *new_socket
)
140 socket
=(int) new_socket
;
142 printf("\n<Receive> started");
146 read(socket
, rec
, sizeof(rec
));
149 printf("\n Empfangen: %s", rec
);
154 void *Send(void *new_socket
)
157 socket
=(int) new_socket
;
159 printf("\n<Send> started");
163 pthread_mutex_lock(&simu_mutex
);
164 pthread_cond_wait(&sensor_trigger
, &simu_mutex
);
166 write(socket
, sensors
, sizeof(sensors
));
168 printf("\n<Send> received Signal");
170 pthread_mutex_unlock(&simu_mutex
);
176 void *Timer_X(void * arg
)
180 printf("\n<TimerX> started");
189 sensors
[sensor
++] = '0';
190 sensors
[sensor
] = '1';
191 pthread_mutex_lock(&simu_mutex
);
192 pthread_cond_signal(&sensor_trigger
);
193 pthread_mutex_unlock(&simu_mutex
);
198 void *Timer_Y(void *arg
)
202 printf("\n<TimerY> started");
204 /* for(i=0; i<10; i++)
207 pthread_mutex_lock(&simu_mutex);
208 pthread_cond_signal(&sensor_trigger);
209 pthread_mutex_unlock(&simu_mutex);