Я попытался сделать этот код отправленными данными в файл php, а вместо него отправить его, он просто грубо возвращает отказ соединения, не имеет четкого понимания, почему, но все кажется мне прекраснымWinsock Doesnt Send, показывает неудачу подключения
#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 Last name: \n");
scanf("%31s",lname);
char telnum[32];
printf("Enter Your Tel Number: \n");
scanf("%31s",telnum);
char email[32];
printf("Enter Your Email: \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 /server/dbarea.php HTTP/1.1\n");
strcat(buffer,"Content - Type:application/x-www-form-urlencoded\n");
strcat(buffer,"Host: localhost\n");
strcat(buffer,"content-Length: 32\n");
strcat(buffer,"\n");
strcat(buffer,"fname=%s&lname=%s&telnum=%s&email=%s");
wsprintfA(buffer,fname, lname, telnum, email);
if(!send(m_socket, 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: $fname\n Last Name: $lname\n Telephone : $telnum\n Email : $email";
$file = fopen("datas.txt","w");
fwrite($file, $log);
fclose($file);
?>
Возможно, вы заблокированы брандмауэром Windows. Можете ли вы использовать telnet на своем сервере? Также возвращается 'WSAGetLastError'? –
'strcat (buffer," fname =% s & lname =% s & telnum =% s & email =% s "); wsprintfA (buffer, fname, lname, telnum, email);' - Объясните, что вы пытаетесь сделать здесь. Вы создаете свой буфер с символьными данными с помощью 'strcat' и' strcpy', а затем вы удаляете всю эту работу, вызывая 'wsprintfA'. Кроме того, в строке формата 'fname' есть больше аргументов, чем указано вами, поэтому поведение не определено. – PaulMcKenzie
Замените '' printf («Ошибка соединения»); '' с '' printf («Ошибка соединения. Код ошибки:% d», WSAGetLastError()); '', а затем посмотрите документацию [connect()] (https : //msdn.microsoft.com/en-us/library/windows/desktop/ms737625%28v=vs.85%29.aspx), чтобы узнать, что вызывает ошибку. – ub3rst4r