|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "ttcpip.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tconvert.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
|
e280ae |
#include <winsock2.h></winsock2.h>
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#include <errno.h> /* obligatory includes */</errno.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <signal.h></signal.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <stdio.h></stdio.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <unistd.h></unistd.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <sys types.h=""></sys>
|
|
Toshihiro Shimizu |
890ddd |
#include <sys socket.h=""></sys>
|
|
Toshihiro Shimizu |
890ddd |
#include <sys wait.h=""></sys>
|
|
Toshihiro Shimizu |
890ddd |
#include <netinet in.h=""></netinet>
|
|
Toshihiro Shimizu |
890ddd |
#include <netdb.h></netdb.h>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifndef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
#define SOCKET_ERROR -1
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TTcpIpClient::TTcpIpClient() {
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
WSADATA wsaData;
|
|
Shinya Kitaoka |
120a6e |
WORD wVersionRequested = MAKEWORD(1, 1);
|
|
Shinya Kitaoka |
120a6e |
int irc = WSAStartup(wVersionRequested, &wsaData);
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TTcpIpClient::~TTcpIpClient() {
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
WSACleanup();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TTcpIpClient::connect(const QString &hostName, const QString &addrStr,
|
|
Shinya Kitaoka |
120a6e |
int port, int &sock) {
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
if (!addrStr.empty())
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
unsigned long ipAddr = inet_addr(addrStr.c_str());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
#if QT_VERSION >= 0x050500
|
|
Shinya Kitaoka |
120a6e |
struct hostent *he = gethostbyname(hostName.toUtf8());
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
struct hostent *he = gethostbyname(hostName.toAscii());
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
if (!he) {
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
int err = WSAGetLastError();
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
return HOST_UNKNOWN;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int socket_id = socket(AF_INET, SOCK_STREAM, 0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
struct sockaddr_in addr;
|
|
Shinya Kitaoka |
120a6e |
memset((char *)&addr, 0, sizeof addr);
|
|
Shinya Kitaoka |
120a6e |
addr.sin_family = he->h_addrtype;
|
|
Shinya Kitaoka |
120a6e |
addr.sin_port = htons(port);
|
|
Shinya Kitaoka |
120a6e |
memcpy((char *)&(addr.sin_addr), he->h_addr, he->h_length);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int rcConnect = ::connect(socket_id, (struct sockaddr *)&(addr), sizeof addr);
|
|
Shinya Kitaoka |
120a6e |
if (rcConnect == SOCKET_ERROR) {
|
|
Shinya Kitaoka |
120a6e |
sock = -1;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
int err = WSAGetLastError();
|
|
Shinya Kitaoka |
120a6e |
switch (err) {
|
|
Shinya Kitaoka |
120a6e |
case WSAECONNREFUSED:
|
|
Shinya Kitaoka |
120a6e |
err = CONNECTION_REFUSED;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case WSAETIMEDOUT:
|
|
Shinya Kitaoka |
120a6e |
err = CONNECTION_TIMEDOUT;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
default:
|
|
Shinya Kitaoka |
120a6e |
err = CONNECTION_FAILED;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
closesocket(socket_id);
|
|
Shinya Kitaoka |
120a6e |
return err;
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
close(socket_id);
|
|
Shinya Kitaoka |
120a6e |
return CONNECTION_FAILED;
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
sock = socket_id;
|
|
Shinya Kitaoka |
120a6e |
return OK;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Shinya Kitaoka |
120a6e |
int TTcpIpClient::connect(const std::string &hostName, const std::string
|
|
Shinya Kitaoka |
120a6e |
&addrStr, int port, int &sock)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
struct hostent *he = gethostbyname (hostName.c_str());
|
|
Toshihiro Shimizu |
890ddd |
if (!he)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
int err = WSAGetLastError();
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
return HOST_UNKNOWN;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int socket_id = socket (AF_INET, SOCK_STREAM,0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
struct sockaddr_in addr;
|
|
Toshihiro Shimizu |
890ddd |
memset((char*)&addr, 0, sizeof addr);
|
|
Toshihiro Shimizu |
890ddd |
addr.sin_family = he->h_addrtype;
|
|
Toshihiro Shimizu |
890ddd |
addr.sin_port = htons(port);
|
|
Toshihiro Shimizu |
890ddd |
memcpy((char *)&(addr.sin_addr), he->h_addr, he->h_length);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int rcConnect = ::connect (socket_id, (struct sockaddr *)&(addr), sizeof
|
|
Shinya Kitaoka |
120a6e |
addr);
|
|
Toshihiro Shimizu |
890ddd |
if (rcConnect == SOCKET_ERROR)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
sock = -1;
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
int err = WSAGetLastError();
|
|
Toshihiro Shimizu |
890ddd |
switch (err)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
case WSAECONNREFUSED:
|
|
Toshihiro Shimizu |
890ddd |
return CONNECTION_REFUSED;
|
|
Toshihiro Shimizu |
890ddd |
case WSAETIMEDOUT:
|
|
Toshihiro Shimizu |
890ddd |
return CONNECTION_TIMEDOUT;
|
|
Toshihiro Shimizu |
890ddd |
default:
|
|
Toshihiro Shimizu |
890ddd |
return CONNECTION_FAILED;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
return CONNECTION_FAILED;
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
sock = socket_id;
|
|
Toshihiro Shimizu |
890ddd |
return OK;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TTcpIpClient::disconnect(int sock) {
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
closesocket(sock);
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
close(sock);
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
return OK;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TTcpIpClient::send(int sock, const QString &data) {
|
|
Shinya Kitaoka |
120a6e |
std::string dataUtf8 = data.toStdString();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString header("#$#THS01.00");
|
|
Shinya Kitaoka |
120a6e |
header += QString::number((int)dataUtf8.size());
|
|
Shinya Kitaoka |
120a6e |
header += "#$#THE";
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::string packet = header.toStdString() + dataUtf8;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// string packet = data;;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int nLeft = packet.size();
|
|
Shinya Kitaoka |
120a6e |
int idx = 0;
|
|
Shinya Kitaoka |
120a6e |
while (nLeft > 0) {
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
int ret = ::send(sock, packet.c_str() + idx, nLeft, 0);
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
int ret = write(sock, packet.c_str() + idx, nLeft);
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (ret == SOCKET_ERROR) {
|
|
Toshihiro Shimizu |
890ddd |
// Error
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
int err = WSAGetLastError();
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
return SEND_FAILED;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
nLeft -= ret;
|
|
Shinya Kitaoka |
120a6e |
idx += ret;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
shutdown(sock, 1);
|
|
Shinya Kitaoka |
120a6e |
return OK;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Campbell Barton |
ccd505 |
static int readData(int sock, QString &data) {
|
|
Shinya Kitaoka |
120a6e |
int cnt = 0;
|
|
Shinya Kitaoka |
120a6e |
char buff[1024];
|
|
Shinya Kitaoka |
120a6e |
memset(buff, 0, sizeof(buff));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
if ((cnt = recv(sock, buff, sizeof(buff), 0)) < 0) {
|
|
Shinya Kitaoka |
120a6e |
int err = WSAGetLastError();
|
|
Shinya Kitaoka |
120a6e |
// GESTIRE L'ERRORE SPECIFICO
|
|
Shinya Kitaoka |
120a6e |
return -1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
if ((cnt = read(sock, buff, sizeof(buff))) < 0) {
|
|
Shinya Kitaoka |
120a6e |
printf("socket read failure %d\n", errno);
|
|
Shinya Kitaoka |
120a6e |
perror("network server");
|
|
Shinya Kitaoka |
120a6e |
close(sock);
|
|
Shinya Kitaoka |
120a6e |
return -1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (cnt == 0) return 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::string aa(buff);
|
|
Shinya Kitaoka |
120a6e |
int x1 = aa.find("#$#THS01.00");
|
|
Shinya Kitaoka |
120a6e |
x1 += sizeof("#$#THS01.00") - 1;
|
|
Shinya Kitaoka |
120a6e |
int x2 = aa.find("#$#THE");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::string ssize;
|
|
Shinya Kitaoka |
120a6e |
for (int i = x1; i < x2; ++i) ssize.push_back(buff[i]);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int size = std::stoi(ssize);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
data = QString(buff + x2 + sizeof("#$#THE") - 1);
|
|
Shinya Kitaoka |
120a6e |
size -= data.size();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
while (size > 0) {
|
|
Shinya Kitaoka |
120a6e |
memset(buff, 0, sizeof(buff));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
if ((cnt = recv(sock, buff, sizeof(buff), 0)) < 0) {
|
|
Shinya Kitaoka |
120a6e |
int err = WSAGetLastError();
|
|
Shinya Kitaoka |
120a6e |
// GESTIRE L'ERRORE SPECIFICO
|
|
Shinya Kitaoka |
120a6e |
return -1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
if ((cnt = read(sock, buff, sizeof(buff))) < 0) {
|
|
Shinya Kitaoka |
120a6e |
printf("socket read failure %d\n", errno);
|
|
Shinya Kitaoka |
120a6e |
perror("network server");
|
|
Shinya Kitaoka |
120a6e |
close(sock);
|
|
Shinya Kitaoka |
120a6e |
return -1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
else if (cnt == 0) {
|
|
Shinya Kitaoka |
120a6e |
break; // break out of loop
|
|
Shinya Kitaoka |
120a6e |
} else if (cnt < (int)sizeof(buff)) {
|
|
Shinya Kitaoka |
120a6e |
data += QString(buff);
|
|
Shinya Kitaoka |
120a6e |
// break; // break out of loop
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
data += QString(buff);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
size -= cnt;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (data.size() < size) return -1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#if 0
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int readData(int sock, string &data)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int cnt = 0;
|
|
Toshihiro Shimizu |
890ddd |
char buff[1024];
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
do
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
memset (buff,0,sizeof(buff));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
if (( cnt = recv(sock, buff, sizeof(buff), 0)) < 0 )
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int err = WSAGetLastError();
|
|
Toshihiro Shimizu |
890ddd |
// GESTIRE L'ERRORE SPECIFICO
|
|
Toshihiro Shimizu |
890ddd |
return -1;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
if (( cnt = read (sock, buff, sizeof(buff))) < 0 )
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
printf("socket read failure %d\n", errno);
|
|
Toshihiro Shimizu |
890ddd |
perror("network server");
|
|
Toshihiro Shimizu |
890ddd |
close(sock);
|
|
Toshihiro Shimizu |
890ddd |
return -1;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
if (cnt == 0)
|
|
Toshihiro Shimizu |
890ddd |
break; // break out of loop
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
data += string(buff);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
while (cnt != 0); // do loop condition
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//#define PRIMA
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef PRIMA
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int readData(int sock, string &data) {
|
|
Shinya Kitaoka |
120a6e |
int cnt = 0;
|
|
Shinya Kitaoka |
120a6e |
char buff[1024];
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
do {
|
|
Shinya Kitaoka |
120a6e |
memset(buff, 0, sizeof(buff));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
if ((cnt = recv(sock, buff, sizeof(buff), 0)) < 0) {
|
|
Shinya Kitaoka |
120a6e |
int err = WSAGetLastError();
|
|
Shinya Kitaoka |
120a6e |
// GESTIRE L'ERRORE SPECIFICO
|
|
Shinya Kitaoka |
120a6e |
return -1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
if ((cnt = read(sock, buff, sizeof(buff))) < 0) {
|
|
Shinya Kitaoka |
120a6e |
printf("socket read failure %d\n", errno);
|
|
Shinya Kitaoka |
120a6e |
perror("network server");
|
|
Shinya Kitaoka |
120a6e |
close(sock);
|
|
Shinya Kitaoka |
120a6e |
return -1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
else if (cnt == 0) {
|
|
Shinya Kitaoka |
120a6e |
break; // break out of loop
|
|
Shinya Kitaoka |
120a6e |
} else if (cnt < sizeof(buff)) {
|
|
Shinya Kitaoka |
120a6e |
data += string(buff);
|
|
Shinya Kitaoka |
120a6e |
// break; // break out of loop
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
data += string(buff);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} while (cnt != 0); // do loop condition
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TTcpIpClient::send(int sock, const QString &data, QString &reply) {
|
|
Shinya Kitaoka |
120a6e |
if (data.size() > 0) {
|
|
Shinya Kitaoka |
120a6e |
int ret = send(sock, data);
|
|
Shinya Kitaoka |
120a6e |
if (ret == 0) ret = readData(sock, reply);
|
|
Shinya Kitaoka |
120a6e |
return ret;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
return OK;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Shinya Kitaoka |
3bfa54 |
int TTcpIpClient::send(int sock, const std::string &data, string &reply)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int ret = send(sock, data);
|
|
Toshihiro Shimizu |
890ddd |
if (ret == 0)
|
|
Toshihiro Shimizu |
890ddd |
ret = readData(sock, reply);
|
|
Toshihiro Shimizu |
890ddd |
return ret;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
*/
|