#include "common/pch.h"
|
#include "SocketManager.h"
|
#include <string>
|
|
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
|
|
|
|
string SocketManager::ADDR;
|
|
|
SocketManager::~SocketManager() {
|
|
}
|
|
|
string SocketManager::sendMsg(const char* msg) {
|
ADDR = "43.138.167.68";
|
//ADDR = "192.168.3.122";
|
return SocketManager::sendMsg(ADDR, PORT, msg);
|
}
|
|
string SocketManager::sendMsg(string addr, int port,const char* msg) {
|
WSADATA wsd;
|
WSAStartup(MAKEWORD(2, 2), &wsd);
|
SOCKET m_SockClient;
|
m_SockClient = socket(AF_INET, SOCK_STREAM, 0);
|
sockaddr_in clientaddr;
|
clientaddr.sin_family = AF_INET;
|
clientaddr.sin_port = htons(port);
|
//clientaddr.sin_addr.S_un.S_addr = ;
|
inet_pton(AF_INET, addr.c_str(),&clientaddr.sin_addr);
|
|
connect(m_SockClient, (sockaddr*)&clientaddr, sizeof(clientaddr));
|
char buffer[1024];
|
|
int result = send(m_SockClient, msg, strlen(msg), 0);
|
if (result < 0) {
|
throw string("·¢ËÍʧ°Ü");
|
}
|
int header_length = 10;
|
int num = recv(m_SockClient, buffer, 1024, 0);
|
string data = string(buffer, 0, num);
|
if (data.find("##") == 0) {
|
//´øÓÐÍ·Îļþ
|
int count = std::stoi(data.substr(2, header_length-2));
|
data = data.substr(header_length);
|
while (data.length() < count) {
|
char buffer[1024];
|
num = recv(m_SockClient, buffer, 1024, 0);
|
if (num > 0) {
|
data.append(string(buffer, 0, num));
|
}
|
}
|
}
|
closesocket(m_SockClient);
|
if (num < 0) {
|
throw string("δ½ÓÊÕµ½ÐÅÏ¢");
|
}
|
return data;
|
}
|
|
string SocketManager::sendMsg(SOCKET m_SockClient, const char* msg)
|
{
|
char buffer[1024];
|
int result = send(m_SockClient, msg, strlen(msg), 0);
|
if (result < 0) {
|
throw string("·¢ËÍʧ°Ü");
|
}
|
int header_length = 10;
|
int num = recv(m_SockClient, buffer, 1024, 0);
|
string data = string(buffer, 0, num);
|
if (data.find("##") == 0) {
|
//´øÓÐÍ·Îļþ
|
int count = std::stoi(data.substr(2, header_length - 2));
|
data = data.substr(header_length);
|
while (data.length() < count) {
|
char buffer[1024];
|
num = recv(m_SockClient, buffer, 1024, 0);
|
if (num > 0) {
|
data.append(string(buffer, 0, num));
|
}
|
}
|
}
|
if (num < 0) {
|
throw string("δ½ÓÊÕµ½ÐÅÏ¢");
|
}
|
return data;
|
}
|
|
SOCKET SocketManager::createSocket(string addr, int port)
|
{
|
WSADATA wsd;
|
WSAStartup(MAKEWORD(2, 2), &wsd);
|
SOCKET m_SockClient;
|
m_SockClient = socket(AF_INET, SOCK_STREAM, 0);
|
sockaddr_in clientaddr;
|
clientaddr.sin_family = AF_INET;
|
clientaddr.sin_port = htons(port);
|
//clientaddr.sin_addr.S_un.S_addr = ;
|
inet_pton(AF_INET, addr.c_str(), &clientaddr.sin_addr);
|
|
int c = connect(m_SockClient, (sockaddr*)&clientaddr, sizeof(clientaddr));
|
if (c != 0) {
|
throw string("socketÁ¬½Óʧ°Ü");
|
}
|
return m_SockClient;
|
}
|
|
string SocketManager::receiveMsg(SOCKET m_SockClient)
|
{
|
char buffer[1024];
|
int header_length = 10;
|
int num = recv(m_SockClient, buffer, 1024, 0);
|
if (num <= 0) {
|
throw string("Á¬½ÓÒѶϿª");
|
}
|
string data = string(buffer, 0, num);
|
if (data.find("##") == 0) {
|
//´øÓÐÍ·Îļþ
|
int count = std::stoi(data.substr(2, header_length - 2));
|
data = data.substr(header_length);
|
while (data.length() < count) {
|
char buffer[1024];
|
num = recv(m_SockClient, buffer, 1024, 0);
|
if (num > 0) {
|
data.append(string(buffer, 0, num));
|
}
|
}
|
}
|
return data;
|
}
|