【问题标题】:Can one Tcp-Client establish connection to 2 different servers at once?一个 Tcp-Client 可以一次与 2 个不同的服务器建立连接吗?
【发布时间】:2013-11-19 17:23:07
【问题描述】:

我的应用程序框图:

我有一个基于 TCP/IP 的系统。正如您在框图中看到的,任务是从 SAP-Server 获取数据。客户端接收文件并将它们保存在已知目录中,Gui-App 可以在其中访问它们。

我需要创建一个 Tcp 客户端,它应该从 SAP-Server 接收文件并将它们发送到 Zebra-Printer。客户端应用程序需要传输数据和接收数据。 我可以在一个客户端应用程序中执行此操作还是需要多个客户端?

我在互联网上找到此代码只是为了测试。

{
int Socket1 = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

sockaddr_in SrcSockAddr;
SrcSockAddr.sin_family = PF_INET;
SrcSockAddr.sin_addr.s_addr = inet_addr("192.168.1.2");
SrcSockAddr.sin_port = htons(5061);

if( -1 == bind(Socket1, (sockaddr*) &SrcSockAddr, sizeof (SrcSockAddr)) )
   exit(1);

sockaddr_in DstSockAddr;
DstSockAddr.sin_family = PF_INET;
DstSockAddr.sin_addr.s_addr = inet_addr("192.168.1.3");
DstSockAddr.sin_port = htons(5061);

if( connect(Socket1, (sockaddr*)&DstSockAddr, sizeof(DstSockAddr)) )
    exit(2);


int Socket2 = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

if( -1 == bind(Socket2, (sockaddr*) &SrcSockAddr, sizeof (SrcSockAddr)) )
    exit(3);

DstSockAddr.sin_port = htons(5062);
if( connect(Socket2, (sockaddr*)&(DstSockAddr), sizeof(DstSockAddr)) )
    exit(4);

exit(0);
}

无法弄清楚它有什么问题......

【问题讨论】:

  • 为什么你认为有问题?你有错误吗?无法解释的行为?你需要更具体。

标签: sockets tcpclient tcpserver


【解决方案1】:

您可以在一个客户端应用程序中使用两个套接字,一个连接到每个服务器。

【讨论】:

  • 你能检查一下我试过的代码有什么问题吗(从互联网上复制的)。
  • 在每个可能的错误之后将其更改为调用 perror() ,您将自己看到。只为每个错误调用 exit() 完全是浪费您和其他人的时间。
  • perror() 在 Windows 上不存在。请改用WSAGetLastError(),如果要检索给定错误代码的人类可读文本消息,请使用FormatMessage()
猜你喜欢
  • 2014-02-01
  • 2018-01-31
  • 2021-08-07
  • 1970-01-01
  • 2013-06-06
  • 2019-12-19
  • 1970-01-01
  • 2010-10-15
  • 2020-10-25
相关资源
最近更新 更多