Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 套接字http请求失败_C_Sockets_Http_Ubuntu - Fatal编程技术网

C 套接字http请求失败

C 套接字http请求失败,c,sockets,http,ubuntu,C,Sockets,Http,Ubuntu,我正在编写一个简单的c程序,将http请求发送到一个USB调制解调器设备,该设备已加载(cdc_ether)的ip地址为192.168.0.144,在ubuntu机器上有ethx接口。我能够成功发送请求http请求失败。因为设备是通过http请求进行控制管理的 定义大小512 define MAXBUF 512 void error(char *msg); int serverSocket; int i,n = 0; size_t bWritten, bTotal; struct so

我正在编写一个简单的c程序,将http请求发送到一个USB调制解调器设备,该设备已加载(cdc_ether)的ip地址为192.168.0.144,在ubuntu机器上有ethx接口。我能够成功发送请求http请求失败。因为设备是通过http请求进行控制管理的

定义大小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 );

    }

}
定义MAXBUF 512
无效错误(字符*消息);
intserversocket;
int i,n=0;
书写的尺寸,b总尺寸;
serverAddr中的结构sockaddr\u;
结构主机*hostptr;
常数int optVal=1;
const socklen_t optLen=sizeof(optVal);
字符缓冲区[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\u str\u connect=“goformId=connect\r\n”;
int main(int argc,const char*argv[]{
int j=0;
memset(&serverAddr,0,sizeof(serverAddr));
serverAddr.sin_family=AF_INET;
serverAddr.sinu端口=htons(80);
serverAddr.sin_addr.s_addr=inet_addr(“192.168.0.1”);
snprintf(发送线、MAXBUF、,
“POST%s HTTP/1.1\r\n”//POST或GET,已测试且均有效。HTTP 1.0 HTTP 1.1均有效,但有时无效。”
“主机:%s\r\n”//但有时HTTP 1.0在本地主机类型中工作得更好
“连接:保持活动\r\n\r\n”
“内容类型:application/x-www-form-urlencoded\r\n”
“内容长度:%d\r\n\r\n”
“%s”,set_cmd_post,host,(unsigned int)strlen(post_str_connect),post_str_connect);
serverSocket=socket(AF\u INET,SOCK\u STREAM,0);
如果(服务器套接字<0)
错误(“socket()”);
int rtn=setsockopt(服务器套接字、SOL_套接字、SO_REUSEADDR(void*)和optVal、optLen);
if(connect(serverSocket,(struct sockaddr*)&serverAddr,sizeof(serverAddr))<0
错误(“connect()”;
printf(“连接到服务器成功\n”);
如果(发送(服务器套接字、发送线、strlen(发送线)、0)>=0)
{
printf(“写入成功\n”);
做
{
n=recv(serverSocket,recvline,sizeof(recvline),0);
如果(n>0)
printf(“%s”,recvline);
}
而(n>0);
}
}
输出:

POST/goform/goform\u set\u cmd\u进程HTTP/1.0

用户代理:rndis\U套接字

主机:192.168.0.1

接受:/

内容长度:24

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

goformId=连接网络

HTTP/1.0 200正常

服务器:GoAhead网站

Pragma:没有缓存

缓存控制:没有缓存

内容类型:text/html


{“result”:“failure”}

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

snprintf(发送线、MAXBUF、

“发布%s HTTP/1.1\r\n”

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

“接受:/\r\n”

“内容类型:application/x-www-form-urlencoded\r\n\r\n”

“%s”,set_cmd_post,agent,host,(unsigned int)strlen(post_str_connect),post_str_connect)

char*post_str_connect=“goformId=connect_NETWORK”

谢谢

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