2015-04-03 280 views
-1

我想開發一個使用c應用程序的一些輸入的web應用程序,我不知道如何發送和接收兩個應用程序之間的消息。Web應用程序和C應用程序之間的通信?Web服務?

我認爲web服務是解決方案,但我不知道適合我需求的技術。

任何人都可以提供一些信息或有用的教程嗎?

在此先感謝。

回答

1

您可以使用套接字使用tcp/ip連接。在服務器端寫套接字偵聽器,在c端寫套接字客戶端,使用套接字將一些數據發送到服務器。這是簡單的例子,如何從客戶端發送的東西服務器

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <signal.h> 

void cleanup(int sig) 
{ 
    printf("\nCleanup on exit\n"); 
    exit(0); 
} 

int create_socket(uint16_t port) 
{ 
    /* Used variables */ 
    int sock; 
    struct sockaddr_in name; 

    /* Create the socket. */ 
    sock = socket (AF_INET, SOCK_STREAM, 0); 
    if (sock < 0) 
    { 
     perror("socket"); 
     exit(EXIT_FAILURE); 
    } 

    /* Give the socket a name. */ 
    name.sin_family = AF_INET; 
    name.sin_port = htons (port); 
    name.sin_addr.s_addr = htonl (INADDR_ANY); 

    /* Connect socket */ 
    if (connect(sock, (struct sockaddr *) &name, sizeof(name)) < 0) 
    { 
     perror("Connect"); 
     exit(EXIT_FAILURE); 
    } 

    return sock; 
} 

int send_command(int sock, char *cmd) 
{ 
    /* Used variables */ 
    char command[128]; 
    int ret; 

    /* Null-terminate command */ 
    bzero(command, 128); 

    /* Create command */ 
    sprintf(command, "%s bla bla \n", cmd); 

    /* Send */ 
    ret = send(sock, command, strlen(command), 0); 
    if (ret < 0) return 0; 
    else printf("Command: %s\n", command); 

    return 1; 
} 

int main(int argc, char *argv[]) 
{ 
    /* Used variables */ 
    int socket, ret; 

    /* Catch signals */ 
    signal(SIGINT, cleanup); 

    /* Print usage if there is no given argument */ 
    if (!argv[1]) 
     printf("Usage: %s <command>\n", argv[0]); 

    /* Create socket with server listener port */ 
    socket = create_socket(5544); 

    /* Send commant to server */ 
    ret = send_command(socket, argv[1]); 

    /* Check and print status */ 
    if (ret) printf("Command sent\n"); 
    else printf("Can not send command\n"); 

    return 0; 
} 

我評論了每一行代碼以對您有用

+0

謝謝你的回答,我會試試看。 有沒有辦法讓服務器詢問客戶端,然後客戶端給出他的答案? – 2015-04-03 11:49:20

+0

是的,客戶端可以使用accept()函數接受套接字並從服務器接收數據。 accept()爲傳入數據返回新的套接字,並且如果將有來自服務器的響應,您可以讀取該套接字上的緩衝區。 – 2015-04-03 11:59:28

相關問題