繁体   English   中英

套接字http请求失败

[英]socket http request is failing

我正在编写简单的C程序以将http请求发送到已加载的USB调制解调器设备(cdc_ether),其IP地址为192.168.0.144,并且在ubuntu计算机上具有ethx接口。我能够成功发送请求http请求失败。 由于设备使用http进行控制,因此请求进行控制管理。

定义BUFFSIZE 512

define MAXBUF 512

void error(char *msg);

int serverSocket;

int i,n = 0;

size_t bWritten, bTotal;

struct sockaddr_in serverAddr;

struct hostent *hostptr;

const int optVal = 1;

const socklen_t optLen = sizeof(optVal);

char buffer[BUFFSIZE];

char *set_cmd_post="/goform/goform_set_cmd_process";

char *host="192.168.0.1";

char sendline[BUFFSIZE + 1]={0};

char recvline[BUFFSIZE + 1]={0};

char *post_str_connect="goformId=CONNECT_NETWORK\r\n";


int main (int argc, const char * argv[]) {

    int j=0;

    memset(&serverAddr, 0, sizeof(serverAddr));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(80);
    serverAddr.sin_addr.s_addr = inet_addr("192.168.0.1");


    snprintf(sendline, MAXBUF,
             "POST %s HTTP/1.1\r\n"  // POST or GET, both tested and works. Both HTTP 1.0 HTTP 1.1 works, but sometimes
             "Host: %s\r\n"     // but sometimes HTTP 1.0 works better in localhost type
             "Connection: Keep-alive\r\n\r\n"
             "Content-type: application/x-www-form-urlencoded\r\n"
             "Content-length: %d\r\n\r\n"
             "%s", set_cmd_post, host, (unsigned int)strlen(post_str_connect), post_str_connect);
    serverSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (serverSocket < 0)
        error("socket()");
    int rtn = setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, (void*) &optVal, optLen);

    if (connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)
        error("connect()");

    printf("connect to server success \n");

    if (send(serverSocket, sendline, strlen(sendline),0)>= 0)
    {
        printf("write success \n");

        do
        {

            n = recv(serverSocket, recvline, sizeof(recvline), 0);
            if (n > 0 )
                printf("%s", recvline);
        }
        while ( n > 0 );

    }

}

输出:

POST / goform / goform_set_cmd_process HTTP / 1.0

用户代理:rndis_socket

主机:192.168.0.1

接受: /

内容长度:24

内容类型:application / x-www-form-urlencoded

goformId = CONNECT_NETWORK

HTTP / 1.0 200 OK

服务器:GoAhead-Webs

语法:无缓存

缓存控制:无缓存

内容类型:text / html

{“结果”:“失败”}

是的,它的工作原理是现在使用wireshark解决了一些缺少行尾的问题。

snprintf(sendline,MAXBUF,

“ POST%s HTTP / 1.1 \\ r \\ n”

“用户代理:%s \\ r \\ n”

"Host: %s\r\n"     

“接受: / \\ r \\ n”

"Content-length: %d\r\n"

“内容类型:应用程序/ x-www-form-urlencoded \\ r \\ n \\ r \\ n”

“%s”,set_cmd_post,代理,主机,(无符号整数)strlen(post_str_connect),post_str_connect)

char * post_str_connect =“ goformId = CONNECT_NETWORK”;

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM