C 套接字http请求失败
我正在编写一个简单的c程序,将http请求发送到一个USB调制解调器设备,该设备已加载(cdc_ether)的ip地址为192.168.0.144,在ubuntu机器上有ethx接口。我能够成功发送请求http请求失败。因为设备是通过http请求进行控制管理的 定义大小512C 套接字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
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"