تعزيز :: :: اسيو الملكية الفكرية :: برنامج التعاون الفني :: :: محلل عزم () كتل إلى الأبد

StackOverflow https://stackoverflow.com/questions/675614

سؤال

وأنا أحاول خلق شيء مشابه ل<لأ href = "http://www.boost.org/doc/libs/1_38_0/doc/html/boost_asio/example/echo/blocking_tcp_echo_client.cpp" يختلط = " نوفولو noreferrer "> هذا الرمز وجدت في الأمثلة boost.asio.

وsocket.h:

class some_class {
private:
    ...
        boost::asio::io_service io_service;
public:
        some_class() {
             /* This stuff isn't used in the example...
               ...but it doesn't change anything... */
             io_service.run();
        }
};

وsocket.cpp:

using boost::asio::ip::tcp;

bool some_class::connect(char* host, char* port) 
{
    printf("Resolving hostname...\n");

    /* Resolve hostname. */
    tcp::resolver resolver(io_service);
    tcp::resolver::query query(tcp::v4(), host, port);
    tcp::resolver::iterator iterator = resolver.resolve(query);

    printf("Connecting to %s:%s... ", host, port);

    /* Connect to resolved hosts. */
    sock->connect(*iterator);

    return true;
}

وز ++ يبني هذا دون أية أخطاء، ولكن رمز أبدا يجعل من الماضي الدعوة resolver.resolve ().
لقد حاولت كل من "127.0.0.1" و "مضيف" لالمضيفة و "80" للميناء. (لا أعتقد أنه يجب أن يهم، ولكن apache2 هو وتشغيلها)

وعندما CTRL + C من طلبي، فإنه من الواضح أن ينهي ولكنه انتاج "توصيل لسلسلة" فقط قبل أن يفعل.

وأنا تخطط لبناء المثال نفسي ومعرفة ما إذا تحدث نفس المشكلة، وبالتأكيد سيتم نشر النتائج هنا. وقد أي شخص واجه هذه المسألة أو يعرف ما يمكن ان يسبب هذا السلوك؟

وتحرير:
على سبيل المثال يدير على ما يرام ... ولدي بعض التصحيح للقيام أفترض.

والثاني تحرير:
أنا لا تحصل عليه، والشيء الوحيد الذي يمكن أن تكون مختلفة هو المضيف / المنفذ.
يستخدم المثال شار * ARGV [] وأنا باستخدام:

char host[] = "localhost";
char port[] = "80";

وتحرير الثالث:
يبدو فعلا أن تسد في الاتصال، نسيت أن fflush (المعياري). ثم أنه يجب أن يكون هناك مشكلة مع المقبس. تنوي القيام به بعض مزيد من الفحوص.

والرابع تحرير:
لي غبي، انها لا تمنع على الإطلاق! كنت مجرد الاعتماد كثيرا على وحدة الانتاج ..

هل كانت مفيدة؟

المحلول

وربما حظر على الدعوة للاتصال، وبعد printf.

والمعياري هو خط مخزنة بشكل افتراضي، ومنذ كنت لم يكن لديك \ ن في نهاية سلسلة printf الخاص بك، فإنك لن ترى انتاجها. عندما تقتل البرنامج، يتم مسح المخزن المؤقت، والذي هو السبب في أنك ترى الرسالة ثم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top