1

I have no idea how to do this please help me out:-

earlier i used to take the server ip address from a .txt file so it was easy to read the ip address from the txt file

#include ".mySocket.h"
#include "myLog.h"
#include "myException.h"
#include "myHostInfo.h"

myLog winLog;
void readServerConfig(string&);
void checkFileExistence(const string&);

int main()
{
    // Initialize the winsock library
    myTcpSocket::initialize();

    // get client's information (assume neither the name nor the address is given)
    winLog << endl;
    winLog << "Retrieve the localHost [CLIENT] name and address:" << endl;
    myHostInfo clientInfo;
    string clientName = clientInfo.getHostName();
    string clientIPAddress = clientInfo.getHostIPAddress();
    cout << "Name: " << clientName << endl;
    cout << "Address: " << clientIPAddress << endl;
    winLog << " ==> Name: " << clientName << endl;
    winLog << " ==> Address: " << clientIPAddress << endl;

    // get server's IP address and name
    string serverIPAddress = "";
    readServerConfig(serverIPAddress);
    winLog << endl;
    winLog << "Retrieve the remoteHost [SERVER] name and address:" << endl;
    winLog << " ==> the given address is " << serverIPAddress << endl;

    myHostInfo serverInfo(serverIPAddress,ADDRESS);
    string serverName = serverInfo.getHostName();
    cout << "Name: " << serverName << endl;
    cout << "Address: " << serverIPAddress << endl;
    winLog << " ==> Name: " << serverName << endl;
    winLog << " ==> Address: " << serverIPAddress << endl;

    // create the socket for client
    myTcpSocket myClient(PORTNUM);
    cout << myClient;
    winLog << "client configuation: " << endl;
    winLog << myClient;

    // connect to the server.
    cout   << "connecting to the server [" << serverName << "] ... " << endl;
    winLog << "connecting to the server [" << serverName << "] ... " << endl;
    myClient.connectToServer(serverIPAddress,ADDRESS);

    int recvBytes = 0;
    while (1)
    {
        // send message to server
        char messageToServer[MAX_MSG_LEN+1];
        memset(messageToServer,0,sizeof(messageToServer));
        cout << "[SEND] ";
        cin.getline(messageToServer,MAX_MSG_LEN);

        winLog << "[SEND] " << messageToServer << endl;
        myClient.sendMessage(string(messageToServer));

        if ( !string(messageToServer).compare("Quit") || !string(messageToServer).compare("quit") ) 
            break;

        // receive message from server
        string messageFromServer = "";
        recvBytes = myClient.recieveMessage(messageFromServer);
        if ( recvBytes == -99 ) 
            break;

        cout   << "[RECV:" << serverName << "]: " << messageFromServer << endl;
        winLog << "[RECV:" << serverName << "]: " << messageFromServer << endl;

    }

    return 1;
}

//from the following code i read the ip address from the txt file but now how to read from INI file
**void readServerConfig(string& serverIPAddr)
{
    string serverConfigFile = "serverConfig.txt";
    checkFileExistence(serverConfigFile);
    ifstream serverConfig(serverConfigFile.c_str());

    // read server's IP address
    getline(serverConfig,serverIPAddr);
    serverConfig.close();
}**

void checkFileExistence(const string& fileName)
{
    ifstream file(fileName.c_str());
    if (!file) 
    {
        cout << "Cannot continue:" << fileName << " does NOT exist!" << endl;
        exit(1);
    }
    file.close();
}

But now i have to take read the server ip address from the INI file,Now the problem is how to read the INI file to get the ip address

My INI file reader and writer

#include "iostream"
#include "IniWriter.h"
#include "IniReader.h"
int main(int argc, char * argv[])
{
    CIniWriter iniWriter(".\\Logger.ini");
    iniWriter.WriteString("Setting", "ServerIp", "192.168.15.168");
    iniWriter.WriteString("Setting", "MultiCastIp", "239.255.42.42");
    iniWriter.WriteString("Setting", "Name", "jianxx");   
    iniWriter.WriteInteger("Setting", "Age", 27); 
    iniWriter.WriteFloat("Setting", "Height", 1.82f); 
    iniWriter.WriteBoolean("Setting", "Marriage", false);  
    CIniReader iniReader(".\\Logger.ini");
    char *szName = iniReader.ReadString("Setting", "Name", "");   
    int iAge = iniReader.ReadInteger("Setting", "Age", 25); 
    float fltHieght = iniReader.ReadFloat("Setting", "Height", 1.80f); 
    bool bMarriage = iniReader.ReadBoolean("Setting", "Marriage", true); 
    char *szName1 = iniReader.ReadString("Setting", "MultiCastIp", ""); 

    std::cout<<"Name:"<<szName<<std::endl
        <<"Age:"<<iAge<<std::endl 
        <<"Height:"<<fltHieght<<std::endl 
        <<"Marriage:"<<bMarriage<<std::endl
      **<<"MultiCastIp:"<<szName1<<std::endl;//i want to read this ip**
    while(1);
    delete szName;  
    return 1;   
}

Please help me out,i have no idea how to write the following function to obtain the ip address

void readServerConfig(string& serverIPAddr)
{
    //Please guide how to write this function
}
4

3 回答 3

2

请记住,当您需要做之前数百万程序员已经完成的事情时,通常有一种方法可以轻松完成,而无需重新发明轮子。

在这种情况下,我会使用GetPrivateProfileString。实际上,我可能会忘记 INI 文件而只使用注册表,但它就是这样。

于 2012-05-22T15:24:41.263 回答
2

看来您已经严重混淆了您要问的内容。我从您的问题中得到的是,您想将 IP 地址字符串解析为 IP 地址,而不是从您已经完成的 INI 文件中读取它。

你不需要。操作系统为您完成。使用gethostbyname是简单的答案。

如果这是家庭作业或其他事情,并且您必须填写该签名,那么首先您会被搞砸,因为它不会返回任何东西......您必须设置一些愚蠢的全局来返回值或其他东西。但是,您可以使用sscanf.

于 2012-05-22T15:40:05.963 回答
2

这段代码看起来很糟糕,而且当你在 ini 文件中添加越来越多的配置选项时,它不会变得更漂亮。您应该使用 boost 库查看这个不错的替代方案。

于 2012-05-22T15:44:05.533 回答