2015-03-30 105 views
-2

我在C中創建了一個將結構添加到文件中的應用程序,現在我想讓它通過套接字工作,使得客戶端要求用戶提交結構,然後服務器將其保存在文件中,以保存客戶端執行的每個操作(添加,刪除,搜索等)的日誌文件。我怎樣才能做到這一點?也有可能從客戶端調用駐留在服務器中的函數嗎?如何從客戶端調用C服務器中的函數

在此先感謝。

+0

您似乎建議您想要在運行時修改源代碼(可以完成)_then_在同一個運行時進程中可以訪問這些修改,從而使源發生更改(您不能)。這需要中間構建,並啓動新流程。這將是這個*** [藝術家]的概念性軟件版本(http://en.wikipedia.org/wiki/M._C._Escher)*** – ryyker 2015-03-30 18:51:59

回答

0

在服務器上創建套接字偵聽器並等待客戶端連接。
當客戶端向你發送一些東西時,解析它並做出相應的動作。

例如:

/* Create the socket and listen to cennections */ 
sock = create_socket(port); 
if (listen(sock, 1) < 0) 
{ 
    perror("listen"); 
    exit(EXIT_FAILURE); 
} 

/* Never end loop for socket listen */ 
while(1) 
{ 
    /* Accept socket */ 
    newsock = accept(sock, (struct sockaddr *) &peer, &len); 

    /* dump_sockaddr (peer, len); */ 
    if (newsock >= 0) 
    { 
     /* Null-terminate socket buffer */ 
     bzero(buf, MAXMSG); 

     /* Read from socket */ 
     ret = read(newsock, buf, sizeof(buf)); 
     if (ret > 0) 
     { 
      printf("Recieved command: %s\n", buf); 

      /* Parse command from buffer */ 
      if (strstr(buf, "deletesomethig") != NULL) 
      { 
       /* Make the appropriate action */ 
       delete_something(); 
      } 
      else if (strstr(buf, "stopsomething") != NULL) 
      { 
       /* Make the appropriate action */ 
       stop_something(); 
      } 
      else 
       printf("Recieved unsupported command: %s\n", buf); 

      /* Close socket */ 
      close(newsock); 
     } 
    } 
} 

/* Close socket */ 
close(sock); 

只是要確保的strstr()與存儲器中沒有故障。這是一個簡單的例子,您可以使用sscanf()從套接字緩衝區解析命令。

相關問題