我在同一台PC(在Windows 10上)有一个C++客户端和golang服务器,并且我希望客户端向服务器发送POST请求。我想发送的请求是/ test。这两个项目编译并运行良好,但请求不是由客户端处理,即使服务器正显示出在Windows上使用C++在本地发送POST请求
"HTTP-GA-SERVER: POST Successfully sent"
这里是C++代码:
#include <winsock2.h>
#include "ga-http-post.h"
int sendPostToMushroom(HttpRequestType req, void* metrics)
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
std::cout << "WSAStartup failed." << std::endl;
return 1;
}
SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN SockAddr;
SockAddr.sin_port=htons(8080);
SockAddr.sin_family=AF_INET;
SockAddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
std::cout << "HTTP-GA: Connecting..." << std::endl;
if (Socket < 0) {
std::cout << "HTTP-GA: Error creating socket: " << WSAGetLastError() << std::endl;
return 1;
}
if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0){
std::cout << "HTTP-GA: Error connecting: " << WSAGetLastError() << std::endl;
return 1;
}
std::cout << "HTTP-GA: Connected to " << inet_ntoa(SockAddr.sin_addr) << std::endl;
char buffer[2048];
strcpy(buffer,"POST /test HTTP/1.1\n");
if (send(Socket,buffer, strlen(buffer),0) != strlen(buffer))
{
std::cout << "HTTP-GA: Error sending:" << WSAGetLastError() << std::endl;
return 1;
}
closesocket(Socket);
WSACleanup();
std::cout << "HTTP-GA: POST Successfully sent" << std::endl;
return 0;
}
而且golang代码:
func (a *Agent) runGaHTTPHandler() {
fmt.Println("HTTP : Init HTTP Server")
http.HandleFunc("/ready", a.handleServerReady)
http.HandleFunc("/unavailable", a.handleServerUnavailable)
http.HandleFunc("/connected", a.handleClientConnected)
http.HandleFunc("/disconnected", a.handleServerUnavailable)
http.HandleFunc("/MetricsCollected", a.handleMetrics)
http.HandleFunc("/test", a.handleTest)
fmt.Println("HTTP : Listen and serve")
log.Fatal(http.ListenAndServe(":8080", nil))
}
func (a *Agent) handleTest(w http.ResponseWriter, r *http.Request) {
fmt.Print("HTTP : Test successful\n")
}
编辑:C++代码改变时,仍然没有工作
‘我希望服务器POST请求发送到客户端。’ - 这是一个错字吗?你不想让C++客户端向Go服务器发送请求吗? (对不起,如果我误解)。你也说'服务器正在显示'HTTP-GA-SERVER:POST成功发送'' - 但是这个消息在C++ **客户端**代码中...... – dmitris
@dmitris这是一个错字,我的日志消息是误导。对不起,我编辑了代码。 – tankyx