This commit is contained in:
ada-dmitry
2023-10-25 10:38:19 +03:00
parent 83b716f874
commit b74967a89e
7 changed files with 166 additions and 39 deletions
Binary file not shown.
+12 -10
View File
@@ -10,7 +10,8 @@
#define SOCK_PATH "tpf_unix_sock.server" #define SOCK_PATH "tpf_unix_sock.server"
int main(void){ int main(void)
{
int server_sock, rc; int server_sock, rc;
socklen_t len; socklen_t len;
int bytes_rec = 0; int bytes_rec = 0;
@@ -20,7 +21,8 @@ int main(void){
memset(buf, 0, 256); memset(buf, 0, 256);
server_sock = socket(AF_UNIX, SOCK_DGRAM, 0); server_sock = socket(AF_UNIX, SOCK_DGRAM, 0);
if (server_sock == -1){ if (server_sock == -1)
{
perror("socket"); perror("socket");
exit(1); exit(1);
} }
@@ -29,28 +31,28 @@ int main(void){
strcpy(server_sockaddr.sun_path, SOCK_PATH); strcpy(server_sockaddr.sun_path, SOCK_PATH);
len = sizeof(server_sockaddr); len = sizeof(server_sockaddr);
unlink(SOCK_PATH); unlink(SOCK_PATH);
rc = bind(server_sock, (struct sockaddr *) &server_sockaddr, len); rc = bind(server_sock, (struct sockaddr *)&server_sockaddr, len);
if (rc == -1){ if (rc == -1)
{
perror("bind"); perror("bind");
close(server_sock); close(server_sock);
exit(1); exit(1);
} }
printf("waiting to recvfrom...\n"); printf("waiting to recvfrom...\n");
bytes_rec = recvfrom(server_sock, buf, 256, 0, (struct sockaddr *) &peer_sock, &len); bytes_rec = recvfrom(server_sock, buf, 256, 0, (struct sockaddr *)&peer_sock, &len);
if (bytes_rec == -1){ if (bytes_rec == -1)
{
perror("recv"); perror("recv");
close(server_sock); close(server_sock);
exit(1); exit(1);
} }
else { else
{
printf("DATA RECEIVED = %s\n", buf); printf("DATA RECEIVED = %s\n", buf);
} }
close(server_sock); close(server_sock);
return 0; return 0;
} }
+25 -19
View File
@@ -1,15 +1,16 @@
#include<sys/types.h> #include <sys/types.h>
#include<sys/socket.h> #include <sys/socket.h>
#include<netinet/in.h> #include <netinet/in.h>
#include<netdb.h> #include <netdb.h>
#include<stdio.h> #include <stdio.h>
#include<stdlib.h> #include <stdlib.h>
#include<unistd.h> #include <unistd.h>
#include<string.h> #include <string.h>
#define DATA "exit" #define DATA "exit"
int main(int argc, char *argv[]){ int main(int argc, char *argv[])
{
int sock; int sock;
socklen_t length; socklen_t length;
struct sockaddr_in server; struct sockaddr_in server;
@@ -17,12 +18,13 @@ int main(int argc, char *argv[]){
char buf[1024]; char buf[1024];
int rval; int rval;
sock = socket(AF_INET, SOCK_STREAM, 0); sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == -1){ if (sock == -1)
{
perror("opening stream socket"); perror("opening stream socket");
exit(1); exit(1);
} }
server.sin_family = AF_INET; server.sin_family = AF_INET;
server.sin_addr.s_addr = htoml(INADDR_ANY; server.sin_addr.s_addr = htoml(INADDR_ANY);
if(argc == 2){ if(argc == 2){
server.sin_port = htons(atoi(argv[1])); server.sin_port = htons(atoi(argv[1]));
} }
@@ -41,22 +43,26 @@ int main(int argc, char *argv[]){
printf("socket port %d\n", ntohs(server.sin_port)); printf("socket port %d\n", ntohs(server.sin_port));
listen(sock, 5); listen(sock, 5);
do{ 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"); perror("accept");
} }
else else
do{ do
memset(buf,0,sizeof buf); {
if((rval = read(msgsock, buf, 1024)) == -1) memset(buf, 0, sizeof buf);
if ((rval = read(msgsock, buf, 1024)) == -1)
perror("reading stream message"); perror("reading stream message");
dprintf(1, "-[%d]\n", rval); dprintf(1, "-[%d]\n", rval);
if(rval == 0){ if (rval == 0)
{
printf("connecting finished\n"); printf("connecting finished\n");
} }
else{ else
dprintf(1,"[%s]\n", buf); {
dprintf(1, "[%s]\n", buf);
} }
}while((rval > 0) && (strcmp(buf,FIN))); } while ((rval > 0) && (strcmp(buf, FIN)));
close(msgsock); close(msgsock);
}while(strcmp(buf,FIN)); }while(strcmp(buf,FIN));
+57
View File
@@ -0,0 +1,57 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
//./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);
}
BIN
View File
Binary file not shown.
+62
View File
@@ -0,0 +1,62 @@
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#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);
}
BIN
View File
Binary file not shown.