读书人

关于SOCKET的有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

关于SOCKET的问题
大家看看这样的socket中使用POST格式对不对?
...
char strPOST[4000];
memset(strPOST, 0x00, 4000);
...
strcpy(strPOST, "POST check.asp/makeLogin?agent HTTP/1.1\r\n ");
strcat(strPOST, "Accept: */*\r\n ");
strcat(strPOST, "Accept-Language: zh-cn\r\n ");
strcat(strPOST, "User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MSIE 6.01)\r\n ");
strcat(strPOST, "Host: 172.28.118.12:80\r\n ");
strcat(strPOST, "Content-Length: 1309568\r\n ");
strcat(strPOST, "Content= <?xml version= "1.0 " encoding= "UTF-8 "?> <user> <type> 1 </type> <notesId> abcc </notesId> <loginName> 54321 </loginName> </user> \r\n ");
strcat(strPOST, "Connection: Keep-Alive\r\n ");
strcat(strPOST, "\r\n ");
...
send(s, strPOST, strlen(strPOST),0);
...


[解决办法]
你是想按照XML的方式来传送消息吧.没看出有什么问题.
[解决办法]
先判断send的返回值
[解决办法]
...
strcpy(strPOST, "POST check.asp/makeLogin?agent HTTP/1.1\r\n ");
strcat(strPOST, "Accept: */*\r\n ");
strcat(strPOST, "Accept-Language: zh-cn\r\n ");
strcat(strPOST, "User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MSIE 6.01)\r\n ");
strcat(strPOST, "Host: 172.28.118.12:80\r\n ");
strcat(strPOST, "Content-Length: 1309568\r\n ");

/*这个语句中, 复制的字符串内部的 引号需要使用转义表达*/
strcat(strPOST, "Content= <?xml version=\ "1.0\ " encoding=\ "UTF-8\ "?> <user> <type> 1 </type> <notesId> abcc </notesId> <loginName> 54321 </loginName> </user> \r\n ");

strcat(strPOST, "Connection: Keep-Alive\r\n ");
strcat(strPOST, "\r\n ");
...
[解决办法]
"收到SERVER那里的信息为空, "

你用的阻塞模式还是非阻塞模式?
[解决办法]
如果是非阻塞模式,SEND的返回值为10054的话,那就很正常了,改为阻塞模式,用ioctlsocket
[解决办法]
WSAGetLastError()的返回值为10054的话,那就证明数据量太大,在非阻塞模式下,无法立即得到数据.
[解决办法]
send返回374证明发送了374个字节流,应该没有问题
recv返回-1,证明没有接收到,你是不是为非阻塞模式?

读书人网 >C语言

热点推荐