Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Tcp 0 0 localhost:30013 localhost:58717 ESTABLISHED 2959/tcpserverСтр 1 из 2Следующая ⇒
Лабораторная работа №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 с.) |