Как отобразить образец текста в сокет программирования C ++ - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть программа, которая создает сокет для данного порта №. Мне нужно отобразить текст hello world, когда он доступен в браузере, скажем, если порт 8080 во время посещения, мне нужно отобразить текст hello world с помощью проги c ++:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>

void error(const char *msg)
{
    perror(msg);
    exit(1);
}

int main(int argc, char *argv[])
{
     int sockfd, newsockfd, portno;
     socklen_t clilen;
     char buffer[256];
     struct sockaddr_in serv_addr, cli_addr;
     int n;
     if (argc < 2) {
         fprintf(stderr,"ERROR, no port provided\n");
         exit(1);
     }
     sockfd = socket(AF_INET, SOCK_STREAM, 0);
     if (sockfd < 0) 
        error("ERROR opening socket");
     bzero((char *) &serv_addr, sizeof(serv_addr));
     portno = atoi(argv[1]);
     serv_addr.sin_family = AF_INET;
     serv_addr.sin_addr.s_addr = INADDR_ANY;
     serv_addr.sin_port = htons(portno);
     if (bind(sockfd, (struct sockaddr *) &serv_addr,
              sizeof(serv_addr)) < 0) 
              error("ERROR on binding");
     listen(sockfd,5);
     clilen = sizeof(cli_addr);
     newsockfd = accept(sockfd, 
                 (struct sockaddr *) &cli_addr, 
                 &clilen);
     if (newsockfd < 0) 
          error("ERROR on accept");
     bzero(buffer,256);
     n = read(newsockfd,buffer,255);
     if (n < 0) error("ERROR reading from socket");
     printf("Here is the message: %s\n",buffer);
     n = write(newsockfd,"I got your message",18);
     if (n < 0) error("ERROR writing to socket");
     close(newsockfd);
     close(sockfd);
     return 0; 
}

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Веб-браузеры говорят HTTP, когда вы запускаете URL-адрес с http: //, поэтому вашему серверу также нужно будет говорить HTTP.

Браузер обычно отправляет

GET / HTTP/1.1
Host: my_website
Header1: blah blah
Header2: blah blah

Запросзаканчивается переводом строки (CR) перевод строки (LN), CR LN

Затем вам нужно будет создать свой ответ, который будет выглядеть примерно так:

HTTP/1.1 200 OK
Content-Length: 11
Content-Type: text/plain

Hello World

. С пустой строкой вся новая строка имеетCRLN

Как уже упоминалось, вы, вероятно, захотите что-то сделать, чтобы ваше чтение не блокировало ваш сервер.

0 голосов
/ 26 апреля 2011

Если на странице в браузере должно отображаться «Hello World!» затем просто напишите это вместо «Я получил ваше сообщение».

Ваш пример работает. Скомпилируйте и запустите

g++ socket.cpp
./a.out 8080

Направьте ваш браузер на это:

firefox http://localhost:8080

Браузер должен сказать: I got your message

Примечание: вы получили этот пример с linuxhowtos.org . Указание на это людей также может помочь им в решении проблем.

0 голосов
/ 26 апреля 2011

Ваш код этого не сделает. Он будет блокироваться при чтении (newsockfd ..), пока не получит ввод, который браузер не собирается отправлять.

Похоже, вы скопировали образец сокет-сервера. Вероятно, было бы хорошо с соответствующим примером клиента, но не с браузером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...