通过C中的套接字发送IP地址

时间:2013-04-19 05:12:53

标签: c++ sockets winapi winsock

我目前有一个工作客户端(用C ++编写)和一个工作服务器(用C语言编写)。我目前正在试图弄清楚如何从服务器向客户端发送一条消息“Hello,(客户端IP地址)”,当我说“Hello”并带有消息时,我想回复客户端我的选择。此外,当客户端发送“退出”时,我想断开客户端,但不关闭服务器。以下是我的代码。

 while(true)     // loop forever
 {
  client = accept(sock,(struct sockaddr*)&from,&fromlen);      // accept connections

  unsigned long ulAddr = from.sin_addr.s_addr;

  char *client_ip;
  client_ip = inet_ntoa(from.sin_addr);

  cout << "Welcome, " << client_ip << endl; // usually prints hello %s
  // cout << "client before thread:" << (int) client << endl;
  // create our recv_cmds thread and pass client socket as a parameter
  CreateThread(NULL, 0,receive_cmds,(LPVOID)client, 0, &thread);
 }

 WSACleanup();

更新代码*我当前的问题是它只打印Welcome %s,而不是实际的IPv4地址。

1 个答案:

答案 0 :(得分:3)

  

char welcome [90] =“Welcome%s”,inet_ntoa(addr_remote.sin_addr);

您不能在这样的声明中格式化字符串缓冲区。您需要使用sprintf()或类似功能,例如:

char welcome[90];
sprintf(welcome, "Welcome %s", inet_ntoa(addr_remote.sin_addr));

或者使用std::string代替:

std::string welcome = "Welcome " + std::string(inet_ntoa(addr_remote.sin_addr));
...
write(nsockfd , welcome.c_str() , welcome.length());