2 #include <sys/socket.h>
5 #include <netinet/in.h>
16 /***************SERVER****************/
19 void *Receive(void *);
21 void *Timer_X(void *);
22 void *Timer_Y(void *);
23 int CreateSocket(int);
25 pthread_mutex_t simu_mutex
;
26 pthread_cond_t sensor_trigger
;
52 struct commands my_commands
;
53 struct sensors my_sensors
;
56 //pthread_attr_t attr;
58 int main(int argc
, char *arcv
[])
60 pthread_t parser
, send
, receive
;
61 int server_socket
, new_socket
, rc
;
67 pthread_mutex_init(&simu_mutex
, NULL
);
68 pthread_cond_init (&sensor_trigger
, NULL
);
70 new_socket
= CreateSocket(server_socket
);
72 // pthread_attr_init(&attr);
73 // pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
76 rc
= pthread_create(&receive
, NULL
, Receive
, (void *) new_socket
);
78 printf("ERROR; return code from pthread_create() receive is %d\n", rc
);
81 rc
= pthread_create(&send
, NULL
, Send
, (void *) new_socket
);
83 printf("ERROR; return code from pthread_create() send is %d\n", rc
);
86 rc = pthread_create(&parser, &attr, Parser, NULL);
88 printf("ERROR; return code from pthread_create() parser is %d\n", rc);
93 rc = pthread_create(&timer_y, &attr, Timer_Y, NULL);
95 printf("ERROR; return code from pthread_create() timer_y is %d\n", rc);
98 //pthread_join(send, NULL);
99 //pthread_join(receive, NULL);
101 //pthread_join(parser, NULL);
103 //pthread_join(timer_y, NULL);
110 printf("\n Server: close()...");
112 close(server_socket
);
115 printf("\n Serverprogramm beendet\n\n");
118 // pthread_attr_destroy(&attr);
119 pthread_mutex_destroy(&simu_mutex
);
120 pthread_cond_destroy(&sensor_trigger
);
125 int CreateSocket(int server_socket
)
129 struct sockaddr_in serverinfo
, clientinfo
;
130 unsigned short int portnmbr
=5000;
131 char ip_addr
[]="127.0.0.1";
133 printf("\n Server: socket()...");
135 server_socket
= socket(AF_INET
, SOCK_STREAM
, 0);
136 serverinfo
.sin_family
= AF_INET
;
137 serverinfo
.sin_addr
.s_addr
= inet_addr(ip_addr
);
138 serverinfo
.sin_port
= htons(portnmbr
);
139 length
= sizeof(serverinfo
);
141 printf("\n Server: bind()...");
142 bind(server_socket
, (struct sockaddr
*)&serverinfo
, length
);
143 printf("\n Server: listen()...");
144 printf("\n Server mit IP %s", ip_addr
);
145 printf(" an Port %d wartet...", portnmbr
);
147 listen(server_socket
, 3);
148 printf("\n Server: accept()...");
149 new_socket
= accept(server_socket
,
150 (struct sockaddr
*)&clientinfo
, &length
);
152 printf("Verbindung mit %s", inet_ntoa(clientinfo
.sin_addr
));
157 void *Parser(void* arg
)
160 printf("\n<Parser> started");
164 scanf("%10s", input
);
166 if(strstr(input
, "test"))
167 printf("\nTesteingabe");
173 void *Receive(void *new_socket
)
175 pthread_t timer_x
, timer_y
;
177 socket
=(int) new_socket
;
179 printf("\n<Receive> started");
184 //pthread_mutex_lock(&simu_mutex);
185 rc
=recv(socket
, (struct commands
*)&my_commands
, sizeof(my_commands
),0);
187 printf("\n%d Bytes empfangen <new commands>", rc
);
193 rc
= pthread_create(&timer_x
, NULL
, Timer_X
, NULL
);
195 printf("\nERROR; return code from pthread_create() timer_x is %d\n", rc
);
196 //pthread_join(timer_x, NULL);
198 // my_commands.xon=1;
199 printf("\nxon %d", my_commands
.xon
);
200 printf(" xdir %d", my_commands
.xdir
);
201 printf(" yon %d", my_commands
.yon
);
202 printf(" ydir %d", my_commands
.ydir
);
203 printf(" zon %d", my_commands
.zon
);
204 printf(" zdir %d", my_commands
.zdir
);
205 printf(" grep %d", my_commands
.grep
);
208 //pthread_mutex_unlock(&simu_mutex);
214 void *Send(void *new_socket
)
217 socket
=(int) new_socket
;
220 printf("\n<Send> started");
224 pthread_mutex_lock(&simu_mutex
);
225 pthread_cond_wait(&sensor_trigger
, &simu_mutex
);
226 printf("\n<Send> received Signal");
227 len
=send(socket
, (struct sensors
*)&my_sensors
, sizeof(my_sensors
),0);
228 printf("\nsent %d bytes",len
);
230 pthread_mutex_unlock(&simu_mutex
);
236 void *Timer_X(void * arg
)
240 printf("\n<TimerX> started");
245 if( my_sensors
.x
>0 && my_sensors
.x
<11)
253 printf("[ERROR] *****MACHINE OUT OF X-RANGE!!!*****");
255 pthread_mutex_lock(&simu_mutex
);
256 pthread_cond_signal(&sensor_trigger
);
257 pthread_mutex_unlock(&simu_mutex
);
262 void *Timer_Y(void *arg
)
266 printf("\n<TimerY> started");
271 if( my_sensors.y>0 && my_sensors.y<11)
279 printf("[ERROR] *****MACHINE OUT OF X-RANGE!!!*****");
281 pthread_mutex_lock(&simu_mutex);
282 pthread_cond_signal(&sensor_trigger);
283 pthread_mutex_unlock(&simu_mutex);