strcpy(m_requestheader,"POST http://daienming.vicp.net/ HTTP/1.0\r\nHOST:daienming.vicp.net:80\r\nContent-Length:104\r\n\r\n|||00000||0003|||0001000000009999|0002000000009999|0003000000009999|0004000000009999|0005000000009999|||\r\n\r\n");

int nTemp = strlen(m_requestheader);
if((nSize = send(m_Socket,(char*)m_requestheader,nTemp-1,NULL)) == SOCKET_ERROR)
{
   n = GetLastError();
   return -1;
}代码中 send 返回值长度正确,是字符串长度,但是我收到的内容中最后的\r\n\r\n没有了,我用嗅探器查看,发现send端发送的最后四个字符全部变成了0,这是怎么回事?

解决方案 »

  1.   

    那我就提供所有代码,呵呵void CsocketTestDlg::OnBnClickedButton1()
    {
    SOCKET m_Socket; struct sockaddr_in server;
    server.sin_family=AF_INET;
    server.sin_port=htons(80);
    server.sin_addr.S_un.S_addr=inet_addr("192.168.1.66"); WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD( 2, 2 );
    WSAStartup( wVersionRequested, &wsaData );
    sockaddr_in ServerAddr;
    ServerAddr.sin_family=AF_INET;
    ServerAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    ServerAddr.sin_port=htons(0);
    m_Socket=socket(PF_INET,SOCK_STREAM,0);
    int n;
    if (( n = connect(m_Socket,(sockaddr*)&server,80))  == SOCKET_ERROR)
    {
    n = GetLastError();
    }
    char szTemp[1000] = {NULL};
    strcpy(szTemp,"POST http://daienming.vicp.net/ HTTP/1.0\r\nHOST:daienming.vicp.net:80\r\nContent-Length:104\r\n\r\n|||00000||0003|||0001000000009999|0002000000009999|0003000000009999|0004000000009999|0005000000009999|||\r\n\r\n");
    int nSize = 0 ;
    int nTemp = strlen(szTemp);
    if((nSize = send(m_Socket,(char*)szTemp,nTemp,NULL)) == SOCKET_ERROR)
    { n = GetLastError();
    return;
    }}
    我的程序就这样~没了!楼上的兄弟再看看
      

  2.   

    接受端是 tcp 调试助手 一个现成的程序,不是自己的程序,并且我发现我的程序在有些机器上可以正常发送,就是全部接收到,但是有些机器上就是不行~而且不管怎么调整字符串的内容,就是最后四个字符变成0,我还以为是tcp帮你分包了,但是分包的话,应该是少了数据而不应该是修改了数据呀~
      

  3.   

    你看到 最后4个字节为0的位置与 \r\n\r\n 位置一致吗?
      

  4.   

    一致~一些机器发送收到的是 \r\n\r\n 有些机器发送就是4个0
      

  5.   

    一致~一些机器发送收到的是 \r\n\r\n 有些机器发送就是4个0**********************************************************不同的机器都发送到同一个接收端吗?
    发送端用的是同一个程序吗?不理解啊,会不会是接收端自身有隐患呢?
      

  6.   

    strcpy(szTemp,"POST http://daienming.vicp.net/ HTTP/1.0\r\nHOST:daienming.vicp.net:80\r\nContent-Length:104\r\n\r\n|||00000||0003|||0001000000009999|0002000000009999|0003000000009999|0004000000009999|0005000000009999|||\r\n\r\n");最后加个\0试试看?