From b74967a89e4188c10e56e74b73bb6f7c6c166471 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Wed, 25 Oct 2023 10:38:19 +0300 Subject: [PATCH] new pull --- TMP/Practice/lecture23.10/app_server | Bin 0 -> 16408 bytes TMP/Practice/lecture23.10/server.c | 40 +++++++++-------- TMP/Practice/lecture23.10/socket.c | 46 +++++++++++--------- TMP/Practice/sem25.10/c_inet.c | 57 ++++++++++++++++++++++++ TMP/Practice/sem25.10/client_app | Bin 0 -> 16880 bytes TMP/Practice/sem25.10/s_inet.c | 62 +++++++++++++++++++++++++++ TMP/Practice/sem25.10/server_app | Bin 0 -> 16792 bytes 7 files changed, 166 insertions(+), 39 deletions(-) create mode 100755 TMP/Practice/lecture23.10/app_server create mode 100644 TMP/Practice/sem25.10/c_inet.c create mode 100755 TMP/Practice/sem25.10/client_app create mode 100644 TMP/Practice/sem25.10/s_inet.c create mode 100755 TMP/Practice/sem25.10/server_app diff --git a/TMP/Practice/lecture23.10/app_server b/TMP/Practice/lecture23.10/app_server new file mode 100755 index 0000000000000000000000000000000000000000..0d42b8b98c48287cb4aed873e315a906fbd43a8f GIT binary patch literal 16408 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 E0Ny<@ga7~l literal 0 HcmV?d00001 diff --git a/TMP/Practice/lecture23.10/server.c b/TMP/Practice/lecture23.10/server.c index 1c3596e..a509cac 100644 --- a/TMP/Practice/lecture23.10/server.c +++ b/TMP/Practice/lecture23.10/server.c @@ -10,47 +10,49 @@ #define SOCK_PATH "tpf_unix_sock.server" -int main(void){ - int server_sock, rc; - socklen_t len; - int bytes_rec = 0; - struct sockaddr_un server_sockaddr, peer_sock; - char buf[256]; - memset(&server_sockaddr, 0, sizeof(struct sockaddr_un)); +int main(void) +{ + int server_sock, rc; + socklen_t len; + int bytes_rec = 0; + struct sockaddr_un server_sockaddr, peer_sock; + char buf[256]; + memset(&server_sockaddr, 0, sizeof(struct sockaddr_un)); memset(buf, 0, 256); - + server_sock = socket(AF_UNIX, SOCK_DGRAM, 0); - if (server_sock == -1){ + if (server_sock == -1) + { perror("socket"); exit(1); } server_sockaddr.sun_family = AF_UNIX; - strcpy(server_sockaddr.sun_path, SOCK_PATH); + strcpy(server_sockaddr.sun_path, SOCK_PATH); len = sizeof(server_sockaddr); unlink(SOCK_PATH); - rc = bind(server_sock, (struct sockaddr *) &server_sockaddr, len); - if (rc == -1){ + rc = bind(server_sock, (struct sockaddr *)&server_sockaddr, len); + if (rc == -1) + { perror("bind"); close(server_sock); exit(1); } - printf("waiting to recvfrom...\n"); - bytes_rec = recvfrom(server_sock, buf, 256, 0, (struct sockaddr *) &peer_sock, &len); - if (bytes_rec == -1){ + bytes_rec = recvfrom(server_sock, buf, 256, 0, (struct sockaddr *)&peer_sock, &len); + if (bytes_rec == -1) + { perror("recv"); close(server_sock); exit(1); } - else { - printf("DATA RECEIVED = %s\n", buf); + else + { + printf("DATA RECEIVED = %s\n", buf); } - close(server_sock); return 0; } - diff --git a/TMP/Practice/lecture23.10/socket.c b/TMP/Practice/lecture23.10/socket.c index bd6e4c2..44300d7 100644 --- a/TMP/Practice/lecture23.10/socket.c +++ b/TMP/Practice/lecture23.10/socket.c @@ -1,15 +1,16 @@ -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #define DATA "exit" -int main(int argc, char *argv[]){ +int main(int argc, char *argv[]) +{ int sock; socklen_t length; struct sockaddr_in server; @@ -17,12 +18,13 @@ int main(int argc, char *argv[]){ char buf[1024]; int rval; sock = socket(AF_INET, SOCK_STREAM, 0); - if(sock == -1){ + if (sock == -1) + { perror("opening stream socket"); exit(1); } server.sin_family = AF_INET; - server.sin_addr.s_addr = htoml(INADDR_ANY; + server.sin_addr.s_addr = htoml(INADDR_ANY); if(argc == 2){ server.sin_port = htons(atoi(argv[1])); } @@ -41,23 +43,27 @@ int main(int argc, char *argv[]){ printf("socket port %d\n", ntohs(server.sin_port)); listen(sock, 5); do{ - if((msgsock = accept(sock,(struct sockaddr *) NULL, (socklen_t *) NULL)) == -1){ + if ((msgsock = accept(sock, (struct sockaddr *)NULL, (socklen_t *)NULL)) == -1) + { perror("accept"); } else - do{ - memset(buf,0,sizeof buf); - if((rval = read(msgsock, buf, 1024)) == -1) + do + { + memset(buf, 0, sizeof buf); + if ((rval = read(msgsock, buf, 1024)) == -1) perror("reading stream message"); dprintf(1, "-[%d]\n", rval); - if(rval == 0){ + if (rval == 0) + { printf("connecting finished\n"); } - else{ - dprintf(1,"[%s]\n", buf); + else + { + dprintf(1, "[%s]\n", buf); } - }while((rval > 0) && (strcmp(buf,FIN))); - close(msgsock); + } while ((rval > 0) && (strcmp(buf, FIN))); + close(msgsock); }while(strcmp(buf,FIN)); exit(0); diff --git a/TMP/Practice/sem25.10/c_inet.c b/TMP/Practice/sem25.10/c_inet.c new file mode 100644 index 0000000..27aaead --- /dev/null +++ b/TMP/Practice/sem25.10/c_inet.c @@ -0,0 +1,57 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +//./client_app stud*** "port" + +#define DATA "Hello, World!" + +int main(int argc, char *argv[]){ + int sock; + struct sockaddr_in server; + struct hostent *hp; + char buf[1024]; + + if (argc < 3) { + printf("c_inet hostname port [data]\n"); + _exit(1); + } + + if((sock = socket( AF_INET, SOCK_STREAM, 0)) == -1) { + perror("opening stream socket"); + exit(1); + } + + hp=malloc(sizeof(struct hostent)); + + server.sin_family = AF_INET; + hp = gethostbyname(argv[1]); + if (hp == (struct hostent *) 0) { + fprintf(stderr, "%s: unknown host\n", argv[1]); + exit(2); + } + memcpy((char *) &server.sin_addr, (char *) hp->h_addr, hp->h_length); + server.sin_port = htons(atoi(argv[2])); + if (connect(sock, (struct sockaddr *) &server, sizeof server) == -1) { + perror("connecting stream socket"); + exit(1); + } + getchar(); + memset(buf,0,1024); + if (argc > 3){ + printf("[%s]\n",argv[3]); + strcpy(buf,argv[3]); + }else{ + strcpy(buf,DATA); + } + if (write(sock, buf, strlen(buf)) == -1) + perror("writing on stream socket"); + close(sock); + exit(0); +} + diff --git a/TMP/Practice/sem25.10/client_app b/TMP/Practice/sem25.10/client_app new file mode 100755 index 0000000000000000000000000000000000000000..9d720e9e61e89b155f04268f36a9db3b1262e662 GIT binary patch literal 16880 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 Ubh!syq-plm%41$2AfSqW0@f^0`2YX_ literal 0 HcmV?d00001 diff --git a/TMP/Practice/sem25.10/s_inet.c b/TMP/Practice/sem25.10/s_inet.c new file mode 100644 index 0000000..a36edc2 --- /dev/null +++ b/TMP/Practice/sem25.10/s_inet.c @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include + +#define FIN "exit" + +int main(int argc, char *argv[]) { + int sock; + socklen_t length; + struct sockaddr_in server; + int msgsock; + char buf[1024]; + int rval; + + sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock == -1) { + perror("opening stream socket"); + exit(1); + } + + server.sin_family = AF_INET; + server.sin_addr.s_addr = htonl(INADDR_ANY); + if(argc == 2) server.sin_port = htons(atoi(argv[1])); + else server.sin_port = 0; + + if (bind(sock, (struct sockaddr *) &server, sizeof server) == -1) { + perror("binding stream socket"); + exit(1); + } + + length = sizeof server; + if (getsockname(sock,(struct sockaddr *) &server, &length) == -1) { + perror("getting socket name"); + exit(1); + } + printf("Socket port %d\n", ntohs(server.sin_port)); + + listen(sock, 5); + do { + if ((msgsock = accept(sock,(struct sockaddr *) NULL,(socklen_t *) NULL)) == -1) + perror("accept"); + else + do { + memset(buf, 0, sizeof buf); + if ((rval = read(msgsock, buf, 1024)) == -1) + perror("reading stream message"); + dprintf(1,"-[%d]\n",rval); + if (rval == 0) + printf("Connection finished\n"); + else{ + dprintf(1,"[%s]\n",buf); + } +// if (!strcmp(buf,FIN)) {break;} + } while ((rval > 0) && (strcmp(buf,FIN))); + close(msgsock); + } while(strcmp(buf,FIN)); + exit(0); +} + diff --git a/TMP/Practice/sem25.10/server_app b/TMP/Practice/sem25.10/server_app new file mode 100755 index 0000000000000000000000000000000000000000..ac73a9023237dbb837e09986283c895edc04dce3 GIT binary patch literal 16792 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 literal 0 HcmV?d00001