I have these methods for a client-server chat app whenever I send a message on the server
Question:
I have these methods for a client-server chat app
whenever I send a message on the server side it works but whenever I try doing it on the client it gives me an error
client:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define bzero(b, len) (memset((b), '\0', (len)), (void) 0)
#include "Client.h"
SOCKET s;
int Client::init(uint16_t port, char* address)
{
int result = 0;
sockaddr_in servaddr;
bzero((char*)&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.S_un.S_addr = inet_addr(address);
servaddr.sin_port = htons(port);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET)
{
return SETUP_ERROR;
}
result = inet_pton(AF_INET, address, &(servaddr.sin_addr));
if (result == 0 || result == -1)
{
return ADDRESS_ERROR;
}
result = connect(s, (sockaddr*)&servaddr, sizeof(servaddr));
if (result == SOCKET_ERROR)
{
if (result == 0)
{
return CONNECT_ERROR;
}
else
{
return SHUTDOWN;
}
}
else
{
return SUCCESS;
}
}
int Client::readMessage(char* buffer, int32_t size)
{
int sizeOrError = recv(s, buffer, size, 0);
if (sizeOrError > size)
{
return PARAMETER_ERROR;
}
if (sizeOrError == SOCKET_ERROR)
{
if (sizeOrError == 0)
{
return SHUTDOWN;
}
else
{
return DISCONNECT;
}
}
else
{
return SUCCESS;
}
}
int Client::sendMessage(char* data, int32_t length)
{
if (length < 0 || length > 255)
{
return PARAMETER_ERROR;
}
int sizeOrError = send(s, data, length, 0);
if (sizeOrError == SOCKET_ERROR)
{
if (sizeOrError == 0)
{
return DISCONNECT;
}
else
{
return SHUTDOWN;
}
}
else
{
return SUCCESS;
}
}
void Client::stop()
{
shutdown(s, SD_BOTH);
close(s);
}
server:
#include "Server.h"
#define bzero(b, len) (memset((b), '\0', (len)), (void) 0)
SOCKET s;
SOCKET s2;
int Server::init(uint16_t port)
{
int result = 0;
sockaddr_in servaddr;
bzero((char*) &servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET)
{
return SETUP_ERROR;
}
result = bind(s, (sockaddr*)&servaddr, sizeof(servaddr));
if (result == INVALID_SOCKET)
{
return BIND_ERROR;
}
result = listen(s, 1);
if (result == SOCKET_ERROR)
{
return SETUP_ERROR;
}
s2 = accept(s, NULL, NULL);
if (s2 == INVALID_SOCKET)
{
if (s2 == SOCKET_ERROR)
{
return CONNECT_ERROR;
}
else
{
return SHUTDOWN;
}
}
else
{
return SUCCESS;
}
}
int Server::readMessage(char* buffer, int32_t size)
{
s2 = recv(s2, buffer, size, 0);
if (s2 > size)
{
return PARAMETER_ERROR;
}
if (s2 == SOCKET_ERROR)
{
if (s2 == 0)
{
return DISCONNECT;
}
else
{
return SHUTDOWN;
}
}
else
{
return SUCCESS;
}
}
int Server::sendMessage(char* data, int32_t length)
{
if (length < 0 || length > 255)
{
return PARAMETER_ERROR;
}
s2 = send(s2, data, length, 0);
if (s2 == SOCKET_ERROR)
{
if (s2 == 0)
{
return DISCONNECT;
}
else
{
return SHUTDOWN;
}
}
else
{
return SUCCESS;
}
}
void Server::stop()
{
shutdown(s, SD_BOTH);
close(s);
close(s2);
}
Business Data Communications Infrastructure Networking and Security
ISBN: 978-0133023893
7th edition
Authors: William Stallings, Tom Case