Pthread bugfix, readme, makefile

This commit is contained in:
2020-10-26 20:57:54 +01:00
parent ef7dfdd80b
commit 7afb97993e
6 changed files with 87 additions and 66 deletions

114
server.c
View File

@@ -13,6 +13,7 @@
#include <stdbool.h>
#include <dirent.h>
#include <time.h>
#include <pthread.h>
#define MAXCHAR 1000
#define BUF 1024
@@ -50,50 +51,16 @@ int countFiles(char path[]) {
return file_count;
}
int main (int argc, char **argv) {
int create_socket, new_socket;
socklen_t addrlen;
char buffer[BUF];
int size;
struct sockaddr_in address, cliaddress;
if( argc < 3 ){
printf("Usage: %s S Port Verzeichniss\n", argv[0]);
exit(EXIT_FAILURE);
}
create_socket = socket (AF_INET, SOCK_STREAM, 0);
memset(&address,0,sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons (atoi(argv[1]));
if (bind ( create_socket, (struct sockaddr *) &address, sizeof (address)) != 0) {
perror("bind error");
return EXIT_FAILURE;
}
listen (create_socket, 5);
addrlen = sizeof (struct sockaddr_in);
//Verzeichniss erstellen
mkdir(argv[2], 0711);
while (1) {
printf("Waiting for connections...\n");
new_socket = accept ( create_socket, (struct sockaddr *) &cliaddress, &addrlen );
if (new_socket > 0)
{
printf ("Client connected from %s:%d...\n", inet_ntoa (cliaddress.sin_addr),ntohs(cliaddress.sin_port));
strcpy(buffer,"Welcome to myserver, Please enter your command:\n");
send(new_socket, buffer, strlen(buffer),0);
}
//ab hier
do {
size = recv (new_socket, buffer, BUF-1, 0);
void *threadFun(void *arg){
int new_socket = *((int *)arg);
char buffer[BUF];
pthread_detach(pthread_self());
if(new_socket > 0){
strcpy(buffer, "Welcome to myserver, Please enter your command:\n");
send(new_socket, buffer, strlen(buffer),0);
}
do {
int size = recv (new_socket, buffer, BUF-1, 0);
if( size > 0)
{
@@ -345,12 +312,10 @@ int main (int argc, char **argv) {
ptr_file = fopen(filename,"r");
if (!ptr_file)
return 1;
perror("File Open error!");
while (fgets(buf,1000, ptr_file)!=NULL) {
strcat(res, buf);
strcat(res, buf);
}
@@ -448,9 +413,7 @@ int main (int argc, char **argv) {
}
}
else {
}else {
printf("error");
char err[] = "ERR";
send(new_socket , err , strlen(err) , 0 );
@@ -471,11 +434,58 @@ int main (int argc, char **argv) {
perror("recv error");
char err[] = "ERR";
send(new_socket , err , strlen(err) , 0 );
return EXIT_FAILURE;
}
} while (strncmp (buffer, "quit", 4) != 0);
close (new_socket);
pthread_exit(NULL);
}
int main (int argc, char **argv) {
int create_socket, new_socket;
socklen_t addrlen;
char buffer[BUF];
int size;
struct sockaddr_in address, cliaddress;
if( argc < 3 ){
printf("Usage: %s S Port Verzeichniss\n", argv[0]);
exit(EXIT_FAILURE);
}
create_socket = socket (AF_INET, SOCK_STREAM, 0);
memset(&address,0,sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons (atoi(argv[1]));
if (bind ( create_socket, (struct sockaddr *) &address, sizeof (address)) != 0) {
perror("bind error");
return EXIT_FAILURE;
}
listen (create_socket, 5);
addrlen = sizeof (struct sockaddr_in);
//Verzeichniss erstellen
mkdir(argv[2], 0711);
pthread_t tid;
int i = 0;
while (1) {
printf("Waiting for connections...\n");
new_socket = accept ( create_socket, (struct sockaddr *) &cliaddress, &addrlen );
if (new_socket > 0)
{
printf ("Client connected from %s:%d...\n", inet_ntoa (cliaddress.sin_addr),ntohs(cliaddress.sin_port));
}
if (pthread_create(&tid, NULL, threadFun, &new_socket) != 0)
{
perror("Failed to create thread");
exit(EXIT_FAILURE);
}
}
close (create_socket);
return EXIT_SUCCESS;