C 和Java通讯的408 request timeout错误问题。
服务端是java的servlet。客户端要求是c。现在遇到问题啦。大侠们帮助看看啊。
服务端的接口是http://192.168.10.11:9080/msg/send。服务器是基于WebSphere的。
我就是要在客户端post一个xml格式的数据过去,让服务端的那个接口接收。
可以用c来发送吧?首先帮小弟看看这个思路有没有错。谢谢哦。
客户端程序:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <ctype.h>
#include <netdb.h>
#include <arpa/inet.h>
#define SENDDATALEN 2048
#define IP "192.168.10.11"
#define PORT 9080
char sendData[SENDDATALEN];
char * getSendData()
{
char loginUser[] = "username";
char loginPwd[] = "password";
char content[SENDDATALEN-20];
memset(sendData, 0, sizeof(sendData));
strcat(sendData, "Accept-Charset: utf-8;q=0.7,*;q=0.7\r\n");
strcat(sendData, "Keep-Alive: 300\r\n");
strcat(sendData, "Connection: keep-alive\r\n");
strcat(sendData, "Content-Type: application/x-www-form-urlencoded\r\n");
strcat(sendData, "LoginUser=username&LoginPwd=password&content=");
strcat(sendData, " <?xml version=\"1.0\" encoding=\"GBK\" ?> ");
strcat(sendData, " <aa> 测试 </aa> ");
/*printf("%s\n", sendData);*/
return sendData;
}
void sendit()
{
int sockfd;
int len=0;
char url[] = "http://192.168.10.11:9080/msg/send";
char *chSend, chRecv[2048];
struct sockaddr_in client;
memset(chRecv, 0, sizeof(chRecv));
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1)
{
printf("sockfd = -1\n");
exit(1);
}
client.sin_family = AF_INET;
client.sin_port = htons(PORT);
client.sin_addr.s_addr = inet_addr(IP);
memset(&(client.sin_zero), 0, sizeof(client.sin_zero));
if(connect(sockfd, (struct sockaddr *)&client, sizeof(struct sockaddr)) == -1)
{
printf("connect = -1\n");
exit(1);
}
chSend = getSendData();
printf("sizeof(getSendData()) = %d\n", strlen(chSend));
len = send(sockfd, getSendData(), strlen(chSend), 0);
printf("send len = %d\n", len);
len = recv(sockfd, chRecv, sizeof(chRecv), 0);
printf("recv len = %d\n", len);
printf("-------Recv-------\n");
printf("recv string = %s\n", chRecv);
close(sockfd);
}
void main()
{
printf("socket\n");
sendit();
}
-------
我这里贴上部分输出:
Sun(James):> a.out
...
sizeof(getSendData()) = 181
send len = 181
recv len = 149
-------Recv-------
recv string =
HTTP/1.1 408 Request Timeout
Connection: Close
Content-Length: 0
Date: Sat, 12 Jun 2021 21:43:34 GMT
Server: WebSphere Application Server/6.0
这个应该是发送数据成功吧。早上服务端没开启服务的时候,一直卡在发送哪里。
开启的时候发送很快,但一直卡在接受哪里啊。所以我就觉得肯定是发送成功了。
还有如果发生成功的话,怎么会提示是:408 Request Timeout错误呢
这个错误不是表示客户端错误么。我晕倒了。
有什么教程可以看的么。谢谢大家。