Zdravím přítomné.
Píšu client-server aplikaci, doted bylo vše v pohodě, klient poslal požadavek pomocí write(), server ho přijal read(), rozparsoval, zpracoval, vytvořil odpověď. Teď se to ale pokazilo. Když jsem napsal funkci write na server a read na klienta pro poslání odpovědi, tak se program při spuštění zastaví a vypadá to, že klient se zasekne na readu, ale zároveň ani server nezpracovává požadavek. Jakoby se posílal první požadavek a nikdy se nedoposlal.
Když ale z klienta funkci read odstraním, tak server požadavek zase přijme, zpracuje a odešle (akorát ho už nikdo nepřijme).
Kód z klienta:
// sends data
if((size = write(clientSocket, request.c_str(), request.length())) == -1) {
printErr(ERR_SEND);
return ERR_SEND;
}
// recieves data
while ((size = read(clientSocket, buf, BUFFER_LEN)) != 0) {
recieved.erase();
recieved.append(buf, size);
data = data + recieved;
}
// closes a connection
close(clientSocket);
Kód ze serveru:
if((pid = fork()) == 0) {
while ((size = read(clientSocket, buf, BUFFER_LEN)) != 0) {
recieved.erase();
recieved.append(buf, size);
request = request + recieved;
}
parserInput(request);
getData();
parserOutput();
if((size = write(clientSocket, sendback.c_str(), sendback.length())) == -1) {
printErr(ERR_SEND);
return ERR_SEND;
}
close(clientSocket);
}
Prosím pište jakékoliv návrhy. Snad bude nějaký správný.