Winsock发送空数据
Winsock Sends Empty Data
我正在尝试模拟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);
相关文章:
- Winsock 数据不是从 IP 检索的,而是从普通 URL 检索的
- 如何通过TCP/IP Winsock发送双型数据
- Winsock 从服务器接收乱码数据
- Winsock:从套接字中删除数据
- Winsock recv() 返回不正确的数据
- 如何使用 winsock (c++) 发送recv 非字符数据
- recv (Winsock) 函数挂起,但数据可用
- C++ 绕道 Winsock recv 挂钩 - 自定义数据包
- C++ WinSock Recv 在接收 0 数据时终止线程而不是返回错误代码
- C++TCP Winsock服务器多次接收相同的数据包
- Winsock正在接收额外的数据
- 未在客户端Winsock中接收到完整数据
- Winsock发送空数据
- 为什么我在使用 winsock 时没有收到 UDP 数据包?
- Winsock C++发送数据时出现问题
- C++服务器无法从客户端/Winsock 接收数据
- Windows/Winsock UDP 数据包正在分组在一起
- C++Winsock将冻结接收数据
- 在C++winsock中通过TCP发送大数据(如文件)
- Winsock发送额外的数据