This commit is contained in:
ada-dmitry
2023-10-25 10:48:50 +03:00
parent b74967a89e
commit e09d60ff11
2 changed files with 65 additions and 50 deletions
+21 -14
View File
@@ -11,47 +11,54 @@
#define DATA "Hello, World!" #define DATA "Hello, World!"
int main(int argc, char *argv[]){ int main(int argc, char *argv[])
{
int sock; int sock;
struct sockaddr_in server; struct sockaddr_in server;
struct hostent *hp; struct hostent *hp;
char buf[1024]; char buf[1024];
if (argc < 3) { if (argc < 3)
{
printf("c_inet hostname port [data]\n"); printf("c_inet hostname port [data]\n");
_exit(1); _exit(1);
} }
if((sock = socket( AF_INET, SOCK_STREAM, 0)) == -1) { if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("opening stream socket"); perror("opening stream socket");
exit(1); exit(1);
} }
hp=malloc(sizeof(struct hostent)); hp = malloc(sizeof(struct hostent));
server.sin_family = AF_INET; server.sin_family = AF_INET;
hp = gethostbyname(argv[1]); hp = gethostbyname(argv[1]);
if (hp == (struct hostent *) 0) { if (hp == (struct hostent *)0)
{
fprintf(stderr, "%s: unknown host\n", argv[1]); fprintf(stderr, "%s: unknown host\n", argv[1]);
exit(2); exit(2);
} }
memcpy((char *) &server.sin_addr, (char *) hp->h_addr, hp->h_length); memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length);
server.sin_port = htons(atoi(argv[2])); server.sin_port = htons(atoi(argv[2]));
if (connect(sock, (struct sockaddr *) &server, sizeof server) == -1) { if (connect(sock, (struct sockaddr *)&server, sizeof server) == -1)
{
perror("connecting stream socket"); perror("connecting stream socket");
exit(1); exit(1);
} }
getchar(); getchar();
memset(buf,0,1024); memset(buf, 0, 1024);
if (argc > 3){ if (argc > 3)
printf("[%s]\n",argv[3]); {
strcpy(buf,argv[3]); printf("[%s]\n", argv[3]);
}else{ strcpy(buf, argv[3]);
strcpy(buf,DATA); }
else
{
strcpy(buf, DATA);
} }
if (write(sock, buf, strlen(buf)) == -1) if (write(sock, buf, strlen(buf)) == -1)
perror("writing on stream socket"); perror("writing on stream socket");
close(sock); close(sock);
exit(0); exit(0);
} }
+24 -16
View File
@@ -7,7 +7,8 @@
#define FIN "exit" #define FIN "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;
@@ -16,47 +17,54 @@ int main(int argc, char *argv[]) {
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 = htonl(INADDR_ANY); server.sin_addr.s_addr = htonl(INADDR_ANY);
if(argc == 2) server.sin_port = htons(atoi(argv[1])); if (argc == 2)
else server.sin_port = 0; server.sin_port = htons(atoi(argv[1]));
else
server.sin_port = 0;
if (bind(sock, (struct sockaddr *) &server, sizeof server) == -1) { if (bind(sock, (struct sockaddr *)&server, sizeof server) == -1)
{
perror("binding stream socket"); perror("binding stream socket");
exit(1); exit(1);
} }
length = sizeof server; length = sizeof server;
if (getsockname(sock,(struct sockaddr *) &server, &length) == -1) { if (getsockname(sock, (struct sockaddr *)&server, &length) == -1)
{
perror("getting socket name"); perror("getting socket name");
exit(1); exit(1);
} }
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); memset(buf, 0, sizeof buf);
if ((rval = read(msgsock, buf, 1024)) == -1) 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("Connection finished\n"); printf("Connection finished\n");
else{ else
dprintf(1,"[%s]\n",buf); {
dprintf(1, "[%s]\n", buf);
} }
// if (!strcmp(buf,FIN)) {break;} // if (!strcmp(buf,FIN)) {break;}
} while ((rval > 0) && (strcmp(buf,FIN))); } while ((rval > 0) && (strcmp(buf, FIN)));
close(msgsock); close(msgsock);
} while(strcmp(buf,FIN)); } while (strcmp(buf, FIN));
exit(0); exit(0);
} }