سؤال

التعلم دفعة، ورسم عميل خادم يوم النهائي مثال. وبعد نظرا لأنني غير قادر على استخدام المنفذ 13 في المثال، إلا أنني غيرت أرقام المنافذ فقط في الخادم وعميل مثال. يعمل الخادم بشكل جيد، ولكن لا يربط العميل أنه يبدو، ولا يتم تقديم أي خطأ.

بيانات الإدخال للعميل "127.0.0.1".

الخادم:

#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>

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

std::string make_daytime_string()
{
  using namespace std; // For time_t, time and ctime;
  time_t now = time(0);
  return ctime(&now);
}

int main()
{
  try
  {
    boost::asio::io_service io_service;

    tcp::endpoint endpoint(tcp::v4(), 8087);
    tcp::acceptor acceptor(io_service, endpoint);

    for (;;)
    {
      tcp::iostream stream;
      acceptor.accept(*stream.rdbuf());
      stream << "test" << make_daytime_string();
    }
  }
  catch (std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }

  return 0;
}

والعميل:

#include <iostream>
#include <string>
#include <boost/asio.hpp>

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

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 2)
    {
      std::cerr << "Usage: daytime_client <host>" << std::endl;
      return 1;
    }

    tcp::iostream s(argv[1], 8087);
    std::string line;
    std::getline(s, line);
    std::cout << line << std::endl;
  }
  catch (std::exception& e)
  {
    std::cout << "Exception: " << e.what() << std::endl;
  }

  return 0;
}
هل كانت مفيدة؟

المحلول

بعض الأشياء من شأنها أن تساعد في تصحيح هذا لك:

  1. ما هي منصة تجري
  2. ما التحويل البرمجي الخاص بك باستخدام، بما في ذلك الإصدار
  3. ما إصدار دفعة تستخدمه

أيضا، شيء واحد للتحقق هو ما إذا كان الخادم يرتبط ب 127.0.0.1 أو الواجهة الخارجية. حاول استخدام عنوان IP لواجهة الخارجية بدلا من 127.0.0.1. تحقق من هذا في Windows باستخدام ipconfig وفي Linux باستخدام IFConfig.

نصائح أخرى

ما كان يعمل بالنسبة لي هو تغيير الطريقة التي أوجدها نقطة النهاية

tcp::endpoint( tcp::v4(), port );

ل

tcp::endpoint( boost::asio::ip::address::from_string("127.0.0.1"), port );

تقوم الطريقة الأولى بإنشاء نقطة نهاية من 0.0.0.0 والتي تعمل بشكل جيد على Mac OS X، ولكنها تعطي رسالة "غير صالحة" على Windows (XP، المبنى مع MSVC 2008).

لا أمانع معرفة سبب الفرق، ولكن على الأقل يعمل.

HMM، جميع الأعمال على 1_36 دفعة نسخة ومكماتي MSVC 2005.
تحقق من إعدادات جدار الحماية الخاص بك.

يأخذ خيار المنفذ سلسلة، مما قد يكون اسم الخدمة، ك "النهار"، ثم سيبحث عن المنفذ المقابل، أو المنفذ بشكل صريح، ولكن يجب أن يكون سلسلة:

TCP :: iOStream S (Argv [1]، "8087")؛

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