Winsock发送空数据

Winsock Sends Empty Data

本文关键字:数据 Winsock      更新时间:2023-10-16

我正在尝试模拟Winsock请求,它不发送数据,因为它只发送空数据,文件(文本文件)创建,但不幸的是,我似乎在文本文件中没有看到任何数据。

C++看起来是这样的:

   #include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Winsock.h>
#pragma comment (lib, "ws2_32")
int main()
{
    char fname[32];
    printf("Enter Your name: n");
    scanf("%31s",fname);
    char lname[32];
    printf("Enter Your name: n");
    scanf("%31s",lname);
    char telnum[32];
    printf("Enter Your name: n");
    scanf("%31s",telnum);
    char email[32];
    printf("Enter Your name: n");
    scanf("%31s",email);
    //Initiate Winsock
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2,2),&wsaData);
    SOCKET m_socket;
      if(m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) ==INVALID_SOCKET)
        {
            printf("Invalid Socket :WSAGetLastError()");
        }
        sockaddr_in clientService;
    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
    clientService.sin_port = htons(80);
    LPHOSTENT host = gethostbyname("127.0.0.1");
    if(connect(m_socket,(SOCKADDR*)&clientService,sizeof(clientService))==SOCKET_ERROR)
        {
        printf("Connection Failure");
        WSACleanup();
        return 1;
        }
    char buffer[1024];
    strcpy(buffer,"POST /dbarea.php HTTP/1.1n");
    strcat(buffer,"Content - Type:application/x-www-form-urlencodedn");
    strcat(buffer,"Host: localostn");
    strcat(buffer,"content-Length:32n");
    strcat(buffer,"n");
    strcat(buffer,"fname=%s&lname=%s&telnum=%s&email=%s");
    wsprintfA(buffer,fname, lname, telnum, email);
    if(!send(s, buffer, strlen(buffer), 0))
    {
        printf("Not Sent ! Error : %d", GetLastError());
    }
    else{
        MessageBoxA(NULL, "Message Sent", "", MB_OK);
    }
    return 0;
}

php看起来像这个

<?php
  $fname = $_POST['fname'];
  $lname = $_POST['lname'];
  $telnum = $_POST['telnum'];
  $email = $_POST['email'];
  $log = "Data : n First Name: $fnamen Last Name: $lnamen Telephone :  $telnumn Email : $email";
  $file =  fopen("datas.txt","w");
  fwrite($file, $log);
  fclose($file);
?>

以下几行导致未定义的行为

char* fname, lname, telnum,email;
printf("Enter Your name: n");
scanf("%s",&fname);
printf("Enter Your Last Name: n");
scanf("%s",&lname);
printf("Enter Your Telephone: n");
scanf("%s",&telnum);
printf("Enter Your EMail: n");
scanf("%s",&email);

首先,您不初始化指针变量,因此它们的值将是不确定的,并且以除初始化之外的任何方式使用它们都是未定义的行为。

第二个问题是您的scanf调用。的确,scanf需要一个指针,但那些变量已经是指针了,所以使用运算符的地址会给你一个指向的指针,在这种情况下,它的类型是char **

解决方案是使用阵列,例如

char fname[32];
printf("Enter Your name: n");
scanf("%31s",fname);