Задача: написать программу, которая запускала бы сервер и ждала подключение по заданному порту. Программа должна выводить принятые сообщения на экран. Отправка сообщение не требуется.
Задание:
Alternatiiv 9
Seekordse labori ülesanne on harjutada võrgust andmete vastuvõtmist. Sisuliselt tuleb implementeerida programm, mis töötab ajaloogselt programmiga "nc -l" — see tähendab, et trükib standardväljundisse kõik, mis programmile võrgust saadetakse. Standardsisendi saatmist implementeerida pole tarvis.
Ülesanne
Kirjutage programm 'mylistener', mis kuulab argumendiks antud pordil saabuvaid ühendusi. Ühenduse tekkimisel näidake kõik saadetu ekraanile.
Programm lõpetab töö, kui teine pool ühenduse sulgeb.
Näiteks kui tahate kuulata porti 8080:
mylistener 8080
Oma programmi testimiseks kasutage teisel konsoolil programmi netcat (nc):
nc localhost 8080
Seejärel võite kirjutada asju, mis peaksid teises konsoolis välja ilmuma. Netcati ühenduse sulgemiseks saate vajutada CTRL+C
Vihjeid
Kui soovite netcatiga midagi pordil 8080 kuulata, kirjutage:
nc -l -p 8080
Kasutage pordinumbreid, mis on suuremad kui 1024. Sellest allapoole jäävad süsteemile reserveeritud pordid.
Seekord prototüüpi pole — kirjutage ka makefile tuginedes varasemale kogemusele.
Esitamine
Saatke kiri pealkirjaga "itv0020 alt9", milles on teie matriklinumber ja midagi, mis spämmifiltrile usutava tekstina tunduks.
Seekordse labori ülesanne on harjutada võrgust andmete vastuvõtmist. Sisuliselt tuleb implementeerida programm, mis töötab ajaloogselt programmiga "nc -l" — see tähendab, et trükib standardväljundisse kõik, mis programmile võrgust saadetakse. Standardsisendi saatmist implementeerida pole tarvis.
Ülesanne
Kirjutage programm 'mylistener', mis kuulab argumendiks antud pordil saabuvaid ühendusi. Ühenduse tekkimisel näidake kõik saadetu ekraanile.
Programm lõpetab töö, kui teine pool ühenduse sulgeb.
Näiteks kui tahate kuulata porti 8080:
mylistener 8080
Oma programmi testimiseks kasutage teisel konsoolil programmi netcat (nc):
nc localhost 8080
Seejärel võite kirjutada asju, mis peaksid teises konsoolis välja ilmuma. Netcati ühenduse sulgemiseks saate vajutada CTRL+C
Vihjeid
Kui soovite netcatiga midagi pordil 8080 kuulata, kirjutage:
nc -l -p 8080
Kasutage pordinumbreid, mis on suuremad kui 1024. Sellest allapoole jäävad süsteemile reserveeritud pordid.
Seekord prototüüpi pole — kirjutage ka makefile tuginedes varasemale kogemusele.
Esitamine
Saatke kiri pealkirjaga "itv0020 alt9", milles on teie matriklinumber ja midagi, mis spämmifiltrile usutava tekstina tunduks.
Решение:
#include#include #include #include #include #include #include #define MAX_MSG_LEN 255 void error(char *msg) { perror(msg); exit(1); } int main(int argc, char *argv[]) { int sock, newsock, c, n, i; char receive_message[MAX_MSG_LEN]; socklen_t clilen; struct sockaddr_in server, client; if (argc < 2) { fprintf(stderr,"\nError. No port provided. Use '%s 8888' for example.\n\n", argv[0]); exit(1); } sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) error("Error on opening socket."); memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(atoi(argv[1])); if (bind(sock, (struct sockaddr *) &server, sizeof(server)) < 0) error("Error on binding."); listen(sock, 1); while(1) { clilen = sizeof(client); newsock = accept(sock, (struct sockaddr *) &client, &clilen); if (newsock < 0) error("ERROR on accept"); else { while(1) { memset(receive_message,0,MAX_MSG_LEN); n = recv(newsock, receive_message, MAX_MSG_LEN, 0); if(n == 0) { shutdown(newsock, 2); exit(EXIT_SUCCESS); } printf("%s", receive_message); } } } exit(EXIT_SUCCESS); }
Будь первым комментатором.
Отправить комментарий