Tcp 0 0 localhost:30013 localhost:58717 ESTABLISHED 2959/tcpserver 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Tcp 0 0 localhost:30013 localhost:58717 ESTABLISHED 2959/tcpserver



Лабораторная работа №7

Оглавление

1.2. 1

2.1. 6

2.3. 12

3.3. 16

Вопросы.. 18

 

1.2

/* udpserver.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#include <sys/stat.h>

 

#include <unistd.h>

#include <arpa/inet.h>

 

#define SERV_PORT 20001

 

#define BUFSIZE 1024

 

#define SADDR struct sockaddr

 

#define SLEN sizeof(struct sockaddr_in)

 

int main() {

 

int sockfd, n, len;

 

char mesg[BUFSIZE], ipadr[16];

 

struct sockaddr_in servaddr;

 

struct sockaddr_in cliaddr;

 

if ((sockfd=socket(AF_INET, SOCK_DGRAM, 0))<0)

 

{perror("socket problem"); exit(1);}

 

memset(&servaddr, 0, SLEN);

 

servaddr.sin_family = AF_INET;

 

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

 

servaddr.sin_port = htons(SERV_PORT);

 

if (bind(sockfd, (SADDR *) &servaddr, SLEN)<0)

 

{perror("bind problem"); exit(1);}

 

printf("SERVER starts...\n");

 

for (;;) {

 

len = SLEN;

 

if ((n = recvfrom(sockfd, mesg, BUFSIZE, 0, (SADDR *)&cliaddr, &len)) < 0)

 

{perror("recvfrom"); exit(1);}

 

mesg[n] = 0;

 

printf("REQUEST %s FROM %s: %d\n", mesg, inet_ntop(AF_INET, (void *)&cliaddr.sin_addr.s_addr, ipadr,16), ntohs(cliaddr.sin_port));

 

sleep(10);

 

if (sendto(sockfd, mesg, n, 0, (SADDR *)&cliaddr, len) < 0)

 

{perror("sendto"); exit(1);}

 

}

 

}

 

/* udpclient.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#include <sys/stat.h>

 

#include <unistd.h>

 

#define SERV_PORT 20001

 

#define BUFSIZE 1024

 

#define SADDR struct sockaddr

 

#define SLEN sizeof(struct sockaddr_in)

 

int main(int argc, char **argv) {

 

int sockfd, n;

 

char sendline[BUFSIZE], recvline[BUFSIZE + 1];

 

struct sockaddr_in servaddr;

 

struct sockaddr_in cliaddr;

 

if (argc!= 2) {printf("usage: client <IPaddress of server>\n"); exit(1);}

 

memset(&servaddr, 0, sizeof(servaddr));

 

servaddr.sin_family = AF_INET;

 

servaddr.sin_port = htons(SERV_PORT);

 

if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr)<0)

 

{perror("inet_pton problem"); exit(1);}

 

if ((sockfd=socket(AF_INET, SOCK_DGRAM, 0))<0) {perror("socket problem"); exit(1);}

 

write(1,"Enter string\n", 13);

 

while ((n=read(0, sendline, BUFSIZE)) > 0) {

 

if (sendto(sockfd, sendline, n, 0, (SADDR *)&servaddr, SLEN) == -1)

 

{perror("sendto problem"); exit(1);}

 

if (recvfrom(sockfd, recvline, BUFSIZE, 0, NULL, NULL) == -1)

 

{perror("recvfrom problem"); exit(1);}

 

printf("REPLY FROM SERVER= %s\n", recvline);

 

}

 

close(sockfd);

 

}

 

 

2.1

 

/* tcpserver.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#define SERV_PORT 30013

 

#define BUFSIZE 100

 

#define SADDR struct sockaddr

 

#define SIZE sizeof(struct sockaddr_in)

 

int main() {

 

int lfd, cfd;

 

int nread, clilen;

 

char buf[BUFSIZE];

 

struct sockaddr_in servaddr;

 

struct sockaddr_in cliaddr;

 

if ((lfd = socket(AF_INET, SOCK_STREAM, 0))<0)

 

{perror("socket"); exit(1);}

 

memset(&servaddr, 0, SIZE);

 

servaddr.sin_family = AF_INET;

 

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

 

servaddr.sin_port = htons(SERV_PORT);

 

if (bind(lfd, (SADDR *) &servaddr, SIZE)<0)

 

{perror("bind"); exit(1);}

 

if (listen(lfd, 5) < 0) {perror("listen"); exit(1);}

 

for(;;){

 

clilen =SIZE;

 

if ((cfd = accept(lfd, (SADDR *)&cliaddr, &clilen)) < 0)

 

{perror("accept"); exit(1);}

 

printf("connection established\n");

 

while ((nread = read(cfd, buf, BUFSIZE))> 0)

 

write(1, &buf, nread);

 

if (nread == -1){perror("read"); exit(1);}

 

close(cfd);

 

}

 

}

 

/* tcpclient.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#define BUFSIZE 100

 

#define SADDR struct sockaddr

 

#define SIZE sizeof(struct sockaddr_in)

 

int main(int argc, char *argv[]){

 

int fd;

 

int nread;

 

char buf[BUFSIZE];

 

struct sockaddr_in servaddr;

 

if (argc < 3) {printf("Too few arguments \n"); exit(1);}

 

if ((fd = socket(AF_INET, SOCK_STREAM, 0))<0)

 

{perror("socket creating"); exit(1);}

 

memset(&servaddr, 0, SIZE);

 

servaddr.sin_family = AF_INET;

 

if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)

 

{perror("bad address"); exit(1);}

 

servaddr.sin_port = htons(atoi(argv[2]));

 

if (connect(fd, (SADDR *)&servaddr, SIZE)<0)

 

{perror("connect"); exit(1);}

 

write(1, "Input message to send\n", 22);

 

while ((nread = read(0, buf, BUFSIZE)) > 0)

 

if (write(fd, buf, nread)<0)

 

{perror("write"); exit(1);}

 

close(fd);

 

exit(0);

 

}

 

vadim@vadim-VirtualBox:~$ netstat -a -p

(Не все процессы были идентифицированы, информация о процессах без владельца

не будет отображена, вам нужны права суперпользователя (root), чтобы увидеть всю информацию.)

Активные соединения с интернетом (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 vadim-VirtualBox:domain *:* LISTEN -

tcp 0 0 localhost:ipp *:* LISTEN -

tcp 0 0 *:30013 *:* LISTEN 2959/tcpserver

Tcp 0 0 localhost:30013 localhost:58717 ESTABLISHED 2959/tcpserver

Tcp 0 0 localhost:58717 localhost:30013 ESTABLISHED 2960/tcpclient

Tcp 2 0 localhost:30013 localhost:58718 ESTABLISHED -

Tcp 0 0 localhost:58718 localhost:30013 ESTABLISHED 3070/tcpclient

tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN -

tcp6 1 0 ip6-localhost:34759 ip6-localhost:ipp CLOSE_WAIT -

udp 0 0 *:mdns *:* -

udp 0 0 *:52615 *:* -

udp 0 0 *:36516 *:* -

udp 0 0 vadim-VirtualBox:domain *:* -

udp 0 0 *:bootpc *:* -

udp 0 0 *:ipp *:* -

udp6 0 0 [::]:35869 [::]:* -

udp6 0 0 [::]:mdns [::]:* -

udp6 0 0 [::]:52883 [::]:* -

Активные сокеты домена UNIX (servers and established)

Proto RefCnt Flags Type State I-Node PID/Program name Путь

unix 2 [ ACC ] STREAM LISTENING 12130 1463/gnome-session @/tmp/.ICE-unix/1463

unix 2 [ ACC ] STREAM LISTENING 11255 - @/tmp/.X11-unix/X0

unix 2 [ ACC ] STREAM LISTENING 12850 1555/pulseaudio /run/user/1000/pulse/native

unix 2 [ ACC ] STREAM LISTENING 14131 - /var/run/cups/cups.sock

 

2.3

/* tcpserver.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

#include <arpa/inet.h>

 

#define SERV_PORT 30013

 

#define BUFSIZE 100

 

#define SADDR struct sockaddr

 

#define SIZE sizeof(struct sockaddr_in)

 

int main() {

 

int lfd, cfd;

 

int nread, clilen;

 

char buf[BUFSIZE], ipadr[16];

 

struct sockaddr_in servaddr;

 

struct sockaddr_in cliaddr;

 

if ((lfd = socket(AF_INET, SOCK_STREAM, 0))<0)

 

{perror("socket"); exit(1);}

 

memset(&servaddr, 0, SIZE);

 

servaddr.sin_family = AF_INET;

 

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

 

servaddr.sin_port = htons(SERV_PORT);

 

if (bind(lfd, (SADDR *) &servaddr, SIZE)<0)

 

{perror("bind"); exit(1);}

 

if (listen(lfd, 5) < 0) {perror("listen"); exit(1);}

 

for(;;){

 

clilen =SIZE;

 

if ((cfd = accept(lfd, (SADDR *)&cliaddr, &clilen)) < 0)

 

{perror("accept"); exit(1);}

 

printf("connection established\n");

 

while ((nread = read(cfd, buf, BUFSIZE))> 0) {

sleep(1);

printf("%s: %d\n", inet_ntop(AF_INET, (void *)&cliaddr.sin_addr.s_addr, ipadr,16), ntohs(cliaddr.sin_port));

 

write(1, &buf, nread);

}

 

if (nread == -1){perror("read"); exit(1);}

 

close(cfd);

 

}

 

}

 

 

/* tcpclient.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#define BUFSIZE 100

 

#define SADDR struct sockaddr

 

#define SIZE sizeof(struct sockaddr_in)

 

int main(int argc, char *argv[]){

 

int fd;

 

int nread;

 

char buf[BUFSIZE];

 

struct sockaddr_in servaddr;

 

if (argc < 3) {printf("Too few arguments \n"); exit(1);}

 

if ((fd = socket(AF_INET, SOCK_STREAM, 0))<0)

 

{perror("socket creating"); exit(1);}

 

memset(&servaddr, 0, SIZE);

 

servaddr.sin_family = AF_INET;

 

if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)

 

{perror("bad address"); exit(1);}

 

servaddr.sin_port = htons(atoi(argv[2]));

 

if (connect(fd, (SADDR *)&servaddr, SIZE)<0)

 

{perror("connect"); exit(1);}

 

write(1, "Input message to send\n", 22);

 

while ((nread = read(0, buf, BUFSIZE)) > 0)

 

if (write(fd, buf, nread)<0)

 

{perror("write"); exit(1);}

 

close(fd);

 

exit(0);

 

}

 

3.3

 

/* tcpserver.c */

#include <sys/socket.h>

#include <sys/types.h>

#include <stdio.h>

#include <netinet/in.h>

 

#define SERV_PORT 30016

#define BUFSIZE 100

#define SADDR struct sockaddr

#define SIZE sizeof(struct sockaddr_in)

 

int main() {

int lfd, cfd;

int nread, clilen;

char buf[BUFSIZE];

struct sockaddr_in servaddr;

struct sockaddr_in cliaddr;

 

if ((lfd = socket(AF_INET, SOCK_STREAM, 0))<0)

{perror("socket"); exit(1);}

 

memset(&servaddr, 0, SIZE);

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(SERV_PORT);

 

if (bind(lfd, (SADDR *) &servaddr, SIZE)<0)

{perror("bind"); exit(1);}

 

if (listen(lfd, 5) < 0) {perror("listen"); exit(1);}

 

for(;;){

clilen =SIZE;

 

if ((cfd = accept(lfd, (SADDR *)&cliaddr, &clilen)) < 0)

{perror("accept"); exit(1);}

 

if (fork()==0)

{

printf("connection established\n");

 

while ((nread = read(cfd, buf, BUFSIZE))> 0)

write(1, &buf, nread);

if (nread == -1){perror("read"); exit(1);}

printf("client gone\n");

close(cfd);

 

return 0;

}

}

}

Вопросы

Со́кеты — название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет — абстрактный объект, представляющий конечную точку соединения. Это структура данных, используемая как оконечная точка взаимодействия для IPC. Сокет является развитием механизма каналов.

Лабораторная работа №7

Оглавление

1.2. 1

2.1. 6

2.3. 12

3.3. 16

Вопросы.. 18

 

1.2

/* udpserver.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#include <sys/stat.h>

 

#include <unistd.h>

#include <arpa/inet.h>

 

#define SERV_PORT 20001

 

#define BUFSIZE 1024

 

#define SADDR struct sockaddr

 

#define SLEN sizeof(struct sockaddr_in)

 

int main() {

 

int sockfd, n, len;

 

char mesg[BUFSIZE], ipadr[16];

 

struct sockaddr_in servaddr;

 

struct sockaddr_in cliaddr;

 

if ((sockfd=socket(AF_INET, SOCK_DGRAM, 0))<0)

 

{perror("socket problem"); exit(1);}

 

memset(&servaddr, 0, SLEN);

 

servaddr.sin_family = AF_INET;

 

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

 

servaddr.sin_port = htons(SERV_PORT);

 

if (bind(sockfd, (SADDR *) &servaddr, SLEN)<0)

 

{perror("bind problem"); exit(1);}

 

printf("SERVER starts...\n");

 

for (;;) {

 

len = SLEN;

 

if ((n = recvfrom(sockfd, mesg, BUFSIZE, 0, (SADDR *)&cliaddr, &len)) < 0)

 

{perror("recvfrom"); exit(1);}

 

mesg[n] = 0;

 

printf("REQUEST %s FROM %s: %d\n", mesg, inet_ntop(AF_INET, (void *)&cliaddr.sin_addr.s_addr, ipadr,16), ntohs(cliaddr.sin_port));

 

sleep(10);

 

if (sendto(sockfd, mesg, n, 0, (SADDR *)&cliaddr, len) < 0)

 

{perror("sendto"); exit(1);}

 

}

 

}

 

/* udpclient.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#include <sys/stat.h>

 

#include <unistd.h>

 

#define SERV_PORT 20001

 

#define BUFSIZE 1024

 

#define SADDR struct sockaddr

 

#define SLEN sizeof(struct sockaddr_in)

 

int main(int argc, char **argv) {

 

int sockfd, n;

 

char sendline[BUFSIZE], recvline[BUFSIZE + 1];

 

struct sockaddr_in servaddr;

 

struct sockaddr_in cliaddr;

 

if (argc!= 2) {printf("usage: client <IPaddress of server>\n"); exit(1);}

 

memset(&servaddr, 0, sizeof(servaddr));

 

servaddr.sin_family = AF_INET;

 

servaddr.sin_port = htons(SERV_PORT);

 

if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr)<0)

 

{perror("inet_pton problem"); exit(1);}

 

if ((sockfd=socket(AF_INET, SOCK_DGRAM, 0))<0) {perror("socket problem"); exit(1);}

 

write(1,"Enter string\n", 13);

 

while ((n=read(0, sendline, BUFSIZE)) > 0) {

 

if (sendto(sockfd, sendline, n, 0, (SADDR *)&servaddr, SLEN) == -1)

 

{perror("sendto problem"); exit(1);}

 

if (recvfrom(sockfd, recvline, BUFSIZE, 0, NULL, NULL) == -1)

 

{perror("recvfrom problem"); exit(1);}

 

printf("REPLY FROM SERVER= %s\n", recvline);

 

}

 

close(sockfd);

 

}

 

 

2.1

 

/* tcpserver.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#define SERV_PORT 30013

 

#define BUFSIZE 100

 

#define SADDR struct sockaddr

 

#define SIZE sizeof(struct sockaddr_in)

 

int main() {

 

int lfd, cfd;

 

int nread, clilen;

 

char buf[BUFSIZE];

 

struct sockaddr_in servaddr;

 

struct sockaddr_in cliaddr;

 

if ((lfd = socket(AF_INET, SOCK_STREAM, 0))<0)

 

{perror("socket"); exit(1);}

 

memset(&servaddr, 0, SIZE);

 

servaddr.sin_family = AF_INET;

 

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

 

servaddr.sin_port = htons(SERV_PORT);

 

if (bind(lfd, (SADDR *) &servaddr, SIZE)<0)

 

{perror("bind"); exit(1);}

 

if (listen(lfd, 5) < 0) {perror("listen"); exit(1);}

 

for(;;){

 

clilen =SIZE;

 

if ((cfd = accept(lfd, (SADDR *)&cliaddr, &clilen)) < 0)

 

{perror("accept"); exit(1);}

 

printf("connection established\n");

 

while ((nread = read(cfd, buf, BUFSIZE))> 0)

 

write(1, &buf, nread);

 

if (nread == -1){perror("read"); exit(1);}

 

close(cfd);

 

}

 

}

 

/* tcpclient.c */

#include <sys/socket.h>

 

#include <sys/types.h>

 

#include <stdio.h>

 

#include <netinet/in.h>

 

#define BUFSIZE 100

 

#define SADDR struct sockaddr

 

#define SIZE sizeof(struct sockaddr_in)

 

int main(int argc, char *argv[]){

 

int fd;

 

int nread;

 

char buf[BUFSIZE];

 

struct sockaddr_in servaddr;

 

if (argc < 3) {printf("Too few arguments \n"); exit(1);}

 

if ((fd = socket(AF_INET, SOCK_STREAM, 0))<0)

 

{perror("socket creating"); exit(1);}

 

memset(&servaddr, 0, SIZE);

 

servaddr.sin_family = AF_INET;

 

if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)

 

{perror("bad address"); exit(1);}

 

servaddr.sin_port = htons(atoi(argv[2]));

 

if (connect(fd, (SADDR *)&servaddr, SIZE)<0)

 

{perror("connect"); exit(1);}

 

write(1, "Input message to send\n", 22);

 

while ((nread = read(0, buf, BUFSIZE)) > 0)

 

if (write(fd, buf, nread)<0)

 

{perror("write"); exit(1);}

 

close(fd);

 

exit(0);

 

}

 

vadim@vadim-VirtualBox:~$ netstat -a -p

(Не все процессы были идентифицированы, информация о процессах без владельца

не будет отображена, вам нужны права суперпользователя (root), чтобы увидеть всю информацию.)

Активные соединения с интернетом (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 vadim-VirtualBox:domain *:* LISTEN -

tcp 0 0 localhost:ipp *:* LISTEN -

tcp 0 0 *:30013 *:* LISTEN 2959/tcpserver

tcp 0 0 localhost:30013 localhost:58717 ESTABLISHED 2959/tcpserver



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 219; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.168.172 (0.234 с.)