Merge branch 'avatar-sending' of s434786/DSIK_project into master
This commit is contained in:
commit
6e395ecba5
7
.gitignore
vendored
7
.gitignore
vendored
@ -1 +1,8 @@
|
|||||||
server
|
server
|
||||||
|
.vscode
|
||||||
|
.DS_Store
|
||||||
|
package.jpg
|
||||||
|
assets
|
||||||
|
package.mp4
|
||||||
|
avServer_test
|
||||||
|
avServer
|
||||||
|
BIN
assets/test.jpg
Executable file
BIN
assets/test.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
BIN
assets/test1.jpg
Executable file
BIN
assets/test1.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
BIN
assets/test2.jpg
Normal file
BIN
assets/test2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
65
avatarClient.c
Normal file
65
avatarClient.c
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
// Client side C/C++ program to demonstrate Socket programming
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#define PORT 8080
|
||||||
|
|
||||||
|
int main(int argc, char const *argv[])
|
||||||
|
{
|
||||||
|
struct sockaddr_in address;
|
||||||
|
int sock = 0, message_recieved;
|
||||||
|
struct sockaddr_in serv_addr;
|
||||||
|
char buffer[1024];
|
||||||
|
|
||||||
|
FILE *avatar;
|
||||||
|
|
||||||
|
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||||
|
{
|
||||||
|
printf("\n Socket creation error \n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&serv_addr, '0', sizeof(serv_addr));
|
||||||
|
|
||||||
|
serv_addr.sin_family = AF_INET;
|
||||||
|
serv_addr.sin_port = htons(PORT);
|
||||||
|
|
||||||
|
// Convert IPv4 and IPv6 addresses from text to binary form
|
||||||
|
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0)
|
||||||
|
{
|
||||||
|
printf("\nInvalid address/ Address not supported \n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
|
||||||
|
{
|
||||||
|
printf("\nConnection Failed \n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
avatar = fopen("package.mp4", "a+");
|
||||||
|
if (avatar == NULL)
|
||||||
|
{
|
||||||
|
printf("Nie udalo się otworzyć pliku");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
message_recieved = recv(sock, buffer, sizeof(buffer), 0);
|
||||||
|
if (strcmp(buffer, "over") == 0)
|
||||||
|
{
|
||||||
|
fclose(avatar);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fwrite(buffer, sizeof(char), sizeof(buffer), avatar);
|
||||||
|
}
|
||||||
|
printf("%s", "Received");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
73
avatarServer.c
Normal file
73
avatarServer.c
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#define PORT 8080
|
||||||
|
|
||||||
|
int main(int argc, char const *argv[])
|
||||||
|
{
|
||||||
|
int server_fd, new_socket, read_avatar;
|
||||||
|
struct sockaddr_in address;
|
||||||
|
int opt = 1;
|
||||||
|
int addrlen = sizeof(address);
|
||||||
|
char buffer[1024];
|
||||||
|
char *overMessage = "over";
|
||||||
|
srand(time(NULL));
|
||||||
|
|
||||||
|
// Creating socket file descriptor
|
||||||
|
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
|
||||||
|
{
|
||||||
|
perror("socket failed");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
address.sin_family = AF_INET;
|
||||||
|
address.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
address.sin_port = htons(PORT);
|
||||||
|
|
||||||
|
// Forcefully attaching socket to the port 8080
|
||||||
|
if (bind(server_fd, (struct sockaddr *)&address,
|
||||||
|
sizeof(address)) < 0)
|
||||||
|
{
|
||||||
|
perror("bind failed");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
printf("bind\n");
|
||||||
|
if (listen(server_fd, 3) < 0)
|
||||||
|
{
|
||||||
|
perror("listen");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
printf("listening\n");
|
||||||
|
if ((new_socket = accept(server_fd, (struct sockaddr *)&address,
|
||||||
|
(socklen_t *)&addrlen)) < 0)
|
||||||
|
{
|
||||||
|
perror("accept");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
printf("accepted\n");
|
||||||
|
int avatar_fd = open("assets/test3.mp4", O_RDONLY);
|
||||||
|
if (avatar_fd < 0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
int start = clock();
|
||||||
|
while ((read_avatar = read(avatar_fd, buffer, sizeof(buffer))) > 0)
|
||||||
|
{
|
||||||
|
printf("%d\n", read_avatar);
|
||||||
|
send(new_socket, buffer, sizeof(buffer), 0);
|
||||||
|
}
|
||||||
|
send(new_socket, overMessage, sizeof(overMessage), 0);
|
||||||
|
int stop = clock();
|
||||||
|
|
||||||
|
printf("%f", ((double)stop - start) / CLOCKS_PER_SEC);
|
||||||
|
|
||||||
|
close(server_fd);
|
||||||
|
close(new_socket);
|
||||||
|
return 0;
|
||||||
|
}
|
71
server.c
71
server.c
@ -7,6 +7,8 @@
|
|||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -39,6 +41,7 @@ typedef struct
|
|||||||
|
|
||||||
void Error(int err);
|
void Error(int err);
|
||||||
void *dataProcessHandler(void *data);
|
void *dataProcessHandler(void *data);
|
||||||
|
void *videoHandler(void *arg);
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
@ -53,7 +56,6 @@ int main(void)
|
|||||||
int sock[2];
|
int sock[2];
|
||||||
struct sockaddr_in myAddrForClients[2];
|
struct sockaddr_in myAddrForClients[2];
|
||||||
struct sockaddr_in clients[2];
|
struct sockaddr_in clients[2];
|
||||||
|
|
||||||
struct sockaddr_in tmp;
|
struct sockaddr_in tmp;
|
||||||
|
|
||||||
myAddr.sin_family = AF_INET;
|
myAddr.sin_family = AF_INET;
|
||||||
@ -69,6 +71,13 @@ int main(void)
|
|||||||
myAddrForClients[0].sin_addr.s_addr = INADDR_ANY;
|
myAddrForClients[0].sin_addr.s_addr = INADDR_ANY;
|
||||||
myAddrForClients[1].sin_addr.s_addr = INADDR_ANY;
|
myAddrForClients[1].sin_addr.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
|
pthread_t video_thread;
|
||||||
|
if (pthread_create(&video_thread, NULL, videoHandler, NULL) < 0)
|
||||||
|
{
|
||||||
|
perror("video_thread");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
if ((sock[i] = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
if ((sock[i] = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
||||||
@ -190,3 +199,63 @@ void Error(int err)
|
|||||||
{
|
{
|
||||||
printf("Error! Code: %d\n", err);
|
printf("Error! Code: %d\n", err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *videoHandler(void *arg)
|
||||||
|
{
|
||||||
|
printf("video_handler\n");
|
||||||
|
char video_buffer[1024];
|
||||||
|
struct stat movieInfo;
|
||||||
|
int counter = 0; //Counts users that request video data
|
||||||
|
int VideoSocketTCP;
|
||||||
|
int new_socket;
|
||||||
|
int read_movie;
|
||||||
|
struct sockaddr_in video_address_tcp, reciever_address;
|
||||||
|
int addrlen = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
|
if ((VideoSocketTCP = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||||
|
{
|
||||||
|
perror("tcp video socket");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
video_address_tcp.sin_family = AF_INET;
|
||||||
|
video_address_tcp.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
video_address_tcp.sin_port = htons(8989);
|
||||||
|
|
||||||
|
if (bind(VideoSocketTCP, (struct sockaddr *)&video_address_tcp,
|
||||||
|
sizeof(video_address_tcp)) < 0)
|
||||||
|
{
|
||||||
|
perror("bind failed");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (listen(VideoSocketTCP, 3) < 0)
|
||||||
|
{
|
||||||
|
perror("listen");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
if ((new_socket = accept(VideoSocketTCP, (struct sockaddr *)&reciever_address,
|
||||||
|
(socklen_t *)&addrlen)) < 0)
|
||||||
|
{
|
||||||
|
perror("accept");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int movie_open = open("assets/test4.mp4", O_RDONLY);
|
||||||
|
int movie_file_stat = fstat(movie_open, &movieInfo);
|
||||||
|
|
||||||
|
send(new_socket, &movieInfo.st_size, sizeof(movieInfo.st_size), 0);
|
||||||
|
printf("Size sended: %lld\n", movieInfo.st_size);
|
||||||
|
|
||||||
|
while ((read_movie = read(movie_open, video_buffer, sizeof(video_buffer))) > 0)
|
||||||
|
{
|
||||||
|
printf("%d ", read_movie);
|
||||||
|
send(new_socket, video_buffer, sizeof(video_buffer), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close(VideoSocketTCP);
|
||||||
|
close(new_socket);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user