Pthread bugfix, readme, makefile
This commit is contained in:
parent
ef7dfdd80b
commit
7afb97993e
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.vscode/
|
26
makefile
26
makefile
@ -1,25 +1,25 @@
|
|||||||
#Client und Server kompilieren
|
#Client und Server kompilieren
|
||||||
all: myserver.c myclient.c
|
all: server.c client.c
|
||||||
gcc myserver.c -o myserver
|
gcc server.c -o server -lpthread
|
||||||
gcc myclient.c -o myclient
|
gcc client.c -o client -lpthread
|
||||||
|
|
||||||
#Kompilierten Client und Server löschen
|
#Kompilierten Client und Server löschen
|
||||||
clean: myclient myserver
|
clean: client server
|
||||||
rm -f myclient myserver
|
rm -f client server
|
||||||
|
|
||||||
#Nur den Client kompilieren:
|
#Nur den Client kompilieren:
|
||||||
client: myclient.c
|
client: client.c
|
||||||
gcc myclient.c -o myclient
|
gcc client.c -o client -lpthread
|
||||||
|
|
||||||
#Nur den Server kompilieren:
|
#Nur den Server kompilieren:
|
||||||
server: myserver.c
|
server: server.c
|
||||||
gcc myserver.c -o myserver
|
gcc server.c -o server -lpthread
|
||||||
|
|
||||||
#Kompilierten Server löschen
|
#Kompilierten Server löschen
|
||||||
cleanS: myserver
|
cleanS: server
|
||||||
rm -f myserver
|
rm -f server
|
||||||
|
|
||||||
#Kompilierten Client löschen
|
#Kompilierten Client löschen
|
||||||
cleanC: myclient
|
cleanC: client
|
||||||
rm -f myclient
|
rm -f client
|
||||||
|
|
||||||
|
@ -1,4 +1,14 @@
|
|||||||
|
|
||||||
|
# Protokoll 🔧
|
||||||
|
|
||||||
|
```
|
||||||
SEND: send;sender;empänger;betreff;nachricht
|
SEND: send;sender;empänger;betreff;nachricht
|
||||||
LIST: list:username;postEinAusgang
|
LIST: list:username;postEinAusgang
|
||||||
READ: read;username;postEinAusgang;nid
|
READ: read;username;postEinAusgang;nid
|
||||||
DEL: del;username;postEinAusgang;nid
|
DEL: del;username;postEinAusgang;nid
|
||||||
|
```
|
||||||
|
|
||||||
|
# Erstellt von
|
||||||
|
|
||||||
|
* Lukas Nowy
|
||||||
|
* Georg Reisinger
|
104
server.c
104
server.c
@ -13,6 +13,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <pthread.h>
|
||||||
#define MAXCHAR 1000
|
#define MAXCHAR 1000
|
||||||
|
|
||||||
#define BUF 1024
|
#define BUF 1024
|
||||||
@ -50,50 +51,16 @@ int countFiles(char path[]) {
|
|||||||
return file_count;
|
return file_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *threadFun(void *arg){
|
||||||
int main (int argc, char **argv) {
|
int new_socket = *((int *)arg);
|
||||||
int create_socket, new_socket;
|
|
||||||
socklen_t addrlen;
|
|
||||||
char buffer[BUF];
|
char buffer[BUF];
|
||||||
int size;
|
pthread_detach(pthread_self());
|
||||||
struct sockaddr_in address, cliaddress;
|
if(new_socket > 0){
|
||||||
|
strcpy(buffer, "Welcome to myserver, Please enter your command:\n");
|
||||||
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);
|
send(new_socket, buffer, strlen(buffer),0);
|
||||||
}
|
}
|
||||||
//ab hier
|
|
||||||
do {
|
do {
|
||||||
size = recv (new_socket, buffer, BUF-1, 0);
|
int size = recv (new_socket, buffer, BUF-1, 0);
|
||||||
if( size > 0)
|
if( size > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -345,12 +312,10 @@ int main (int argc, char **argv) {
|
|||||||
|
|
||||||
ptr_file = fopen(filename,"r");
|
ptr_file = fopen(filename,"r");
|
||||||
if (!ptr_file)
|
if (!ptr_file)
|
||||||
return 1;
|
perror("File Open error!");
|
||||||
|
|
||||||
while (fgets(buf,1000, ptr_file)!=NULL) {
|
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");
|
printf("error");
|
||||||
char err[] = "ERR";
|
char err[] = "ERR";
|
||||||
send(new_socket , err , strlen(err) , 0 );
|
send(new_socket , err , strlen(err) , 0 );
|
||||||
@ -471,11 +434,58 @@ int main (int argc, char **argv) {
|
|||||||
perror("recv error");
|
perror("recv error");
|
||||||
char err[] = "ERR";
|
char err[] = "ERR";
|
||||||
send(new_socket , err , strlen(err) , 0 );
|
send(new_socket , err , strlen(err) , 0 );
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (strncmp (buffer, "quit", 4) != 0);
|
} while (strncmp (buffer, "quit", 4) != 0);
|
||||||
close (new_socket);
|
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);
|
close (create_socket);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user