c++ - C++中的TCP/Ip网络通讯

标签 c++ sockets tcp-ip

我正在尝试编写一个线程功能,该功能通过本地网络上的Tcp / ip将系统信息发送到另一台计算机。我一直在使用套接字来实现这一点,到目前为止,这已经很不错了。但是我现在可以正常工作,但是大约有30%的时间我收到错误消息,告诉我无法打开套接字。我将activeSocket库用于套接字。

#include "tbb/tick_count.h"
#include "ActiveSocket.h"

using namespace std;

CActiveSocket socket;
extern int hardwareStatus;



int establishTCP() {
 char time[11];
 int communicationFailed = 0;
 memset(&time, 0, 11);
 socket.Initialize();
 socket.SetConnectTimeout(0, 20);
 socket.SetSendTimeout(0, 20);
 return communicationFailed;
}


int monitor() {
 cout << "Monitor: init continious monitoring" << endl;
 int communicationFailed;
 tbb::tick_count monitorCounter = tbb::tick_count::now();
 while (!closeProgram) {
  tbb::tick_count currentTick = tbb::tick_count::now();
  tbb::tick_count::interval_t interval;
  interval = currentTick - monitorCounter;
  if (interval.seconds() > 2) {
   monitorCounter = tbb::tick_count::now();
   communicationFailed = 1;
   char buffer[256];
   sprintf(buffer, "%d;", hardwareStatus);

   establishTCP();

   char *charip = new char[monitoringIP.size() + 1];
   charip[monitoringIP.size()] = 0;
   memcpy(charip, monitoringIP.c_str(), monitoringIP.size());
   const uint8* realip = (const uint8 *) charip;
   int monitorCount = 0;
   cout << "Monitor: " << buffer << endl;
   while (communicationFailed == 1 && monitorCount < 2) {
    monitorCount++;
    if (socket.Open(realip, 2417)) {
     if (socket.Send((const uint8 *) buffer, strlen(buffer))) {
      cout << "Monitor: Succeeded sending data" << endl;
      communicationFailed = 0;
      socket.Close();
      } else {
       socket.Close();
       communicationFailed = 1;
       cout << "Monitor: FAILED TO SEND DATA" << endl;
      }
     } else {
       socket.Close();
       communicationFailed = 1;
       cout << "Monitor: FAILED TO OPEN SOCKET FOR DATA" << endl;
      }
     }
    if (monitorCount == 2) cout << "Monitor: UNABLE TO SEND DATA" << endl;
   }
  }
  return communicationFailed;
 }


我认为我在这些功能上做错了,问题不在接收此数据的那一行上。谁能在此代码中看到任何明显的错误,从而导致失败?我不断收到自己的提示消息"Monitor: FAILED TO OPEN SOCKET FOR DATA"

编辑:使用telnet,一切正常,时间100%

最佳答案

您可以使用netstat来检查服务器是否正在侦听该端口并且正在建立连接。 Snoop是Armour Armour中另一个很好的应用程序,用于找出问题所在。另一种可能性是使用telnet来查看客户端是否可以连接到该IP地址和端口。至于代码,我稍后会看一下,看是否有问题。

关于c++ - C++中的TCP/Ip网络通讯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11472019/

相关文章:

c - 在 C 中,如何在不关闭/关闭套接字的情况下写入数据后指示 EOF?

java - 我应该在何时何地使用 close() 方法来避免 ObjectInputStream 中的 IOException?

c++ - 在 Linux 中使用 C/C++ 强制 tcp/ip 跟踪路由通过某个跃点

linux - 在Linux中使用TCP/IP发送原始数据

c++ - 从C++中继承的虚拟模板类返回内部类

c++ - std::map行为异常

c - 使用gethostbyname时出现段错误

java - Java TCP/IP套接字

c++ - C++ shared_ptr继承内存问题 “Bad deallocation”

c++ - 是否可以制作仅具有函数成员属性的回调接口(interface)?