Question: I am making chat program using windows 10 and C (Visual Studio 2015). I have wanted to check how does it works so I copied

I am making chat program using windows 10 and C (Visual Studio 2015).

I have wanted to check how does it works so I copied and pasted server and client code and then I have run this code but I have failed to run even a server code.

I made 2 projects and one project has server code and the other has client code.

Everytime I run this code clicking exe file in debug folder, cmd window appears and disappears very quickly.

and Everytime I run this code using ctrl + f5 on visual studio 2015, cmd window appears and show me "Usage: C:\Users\~~~~~~.exe . ~~ enter any keys" and does nothing.

I think cmd window must not be disappeared until it connects with client or I enter some port number.

I think code is not wrong..

Please help me. here are server code and client code.

-----------------------------------------------------------------------------------------------

1. Server

#define _WINSOCK_DEPRECATED_NO_WARNINGS

#include

#include

#include

#include

#include

#define BUFFER_SIZE 100

#define MAXIMUM_CLIENT_NUMBER 100

unsigned WINAPI Handle_Client(void *arg);

void sending_messages(char *messages, int length);

void error_handling(char *messages);

int client_number = 0;

SOCKET client[MAXIMUM_CLIENT_NUMBER];

HANDLE hMutex;

int main(int argc, char *argv[]) {

WSADATA wsaData;

SOCKET server_socket, client_socket;

SOCKADDR_IN server_address, client_address;

int client_address_size;

HANDLE hThread;

if (argc != 2) {

printf("Usage: %s ", argv[0]);

exit(1);

}

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {

error_handling("WSAStartup() error!");

}

hMutex = CreateMutex(NULL, FALSE, NULL);

server_socket = socket(PF_INET, SOCK_STREAM, 0);

memset(&server_address, 0, sizeof(server_address));

server_address.sin_family = AF_INET;

server_address.sin_addr.s_addr = htonl(INADDR_ANY);

server_address.sin_port = htons(atoi(argv[1]));

if (bind(server_socket, (SOCKADDR*)&server_address, sizeof(server_address)) == SOCKET_ERROR) {

error_handling("bind() error");

}

if (listen(server_socket, 5) == SOCKET_ERROR) {

error_handling("listen() error");

}

while (1) {

client_address_size = sizeof(client_address);

client_socket = accept(server_socket, (SOCKADDR*)&client_address, &client_address_size);

WaitForSingleObject(hMutex, INFINITE);

client[client_number++] = client_socket;

ReleaseMutex(hMutex);

hThread = (HANDLE)_beginthreadex(NULL, 0, Handle_Client, (void*)&client_socket, 0, NULL);

printf("Connected client IP: %s ", inet_ntoa(client_address.sin_addr));

}

closesocket(server_socket);

WSACleanup();

return 0;

}

unsigned WINAPI Handle_Client(void *arg) {

SOCKET client_socket = *((SOCKET*)arg);

int string_length = 0, i;

char messages[BUFFER_SIZE];

while ((string_length = recv(client_socket, messages, sizeof(messages), 0)) != 0) {

sending_messages(messages, string_length);

}

WaitForSingleObject(hMutex, INFINITE);

for (i = 0; i < client_number; i++) {

if (client_socket == client[i]) {

while (i++ < client_number - 1) {

client[i] = client[i + 1];

break;

}

}

}

client_number--;

ReleaseMutex(hMutex);

closesocket(client_socket);

return 0;

}

void sending_messages(char *messages, int length) {

int i;

WaitForSingleObject(hMutex, INFINITE);

for (i = 0; i < client_number; i++) {

send(client[i], messages, length, 0);

}

ReleaseMutex(hMutex);

}

void error_handling(char *messages) {

fputs(messages, stderr);

fputc(' ', stderr);

exit(1);

}

-------------------------------------------------------------------------------------------------

2. Client

#define _WINSOCK_DEPRECATED_NO_WARNINGS

#include

#include

#include

#include

#include

#define BUFFER_SIZE 100

#define NAME_SIZE 20

unsigned WINAPI sending_messages(void *arg);

unsigned WINAPI receiving_messages(void *arg);

void error_handling(char *messages);

char name[NAME_SIZE] = "[DEFAULT]";

char messages[BUFFER_SIZE];

int main(int argc, char *argv[]) {

WSADATA wsaData;

SOCKET hSock;

SOCKADDR_IN server_address;

HANDLE sending_thread, receiving_thread;

if (argc != 4) {

printf("Usage: %s ", argv[0]);

exit(1);

}

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {

error_handling("WSAStartup() error!");

}

sprintf(name, "[%s]", argv[3]);

hSock = socket(PF_INET, SOCK_STREAM, 0);

memset(&server_address, 0, sizeof(server_address));

server_address.sin_family = AF_INET;

server_address.sin_addr.s_addr = htonl(INADDR_ANY);

server_address.sin_port = htons(atoi(argv[1]));

if (connect(hSock, (SOCKADDR*)&server_address, sizeof(server_address)) == SOCKET_ERROR) {

error_handling("connect() error");

}

sending_thread = (HANDLE)_beginthreadex(NULL, 0, sending_messages, (void*)&hSock, 0, NULL);

receiving_thread = (HANDLE)_beginthreadex(NULL, 0, receiving_messages, (void*)&hSock, 0, NULL);

WaitForSingleObject(sending_thread, INFINITE);

WaitForSingleObject(receiving_thread, INFINITE);

closesocket(hSock);

WSACleanup();

return 0;

}

unsigned WINAPI sending_messages(void *arg) {

SOCKET hSock = *((SOCKET*)arg);

char name_messages[NAME_SIZE + BUFFER_SIZE];

while (1) {

fgets(messages, BUFFER_SIZE, stdin);

if (!strcmp(messages, "q ") || strcmp(messages, "Q ")) {

closesocket(hSock);

exit(0);

}

sprintf(name_messages, "%s %s", name, messages);

send(hSock, name_messages, strlen(name_messages), 0);

}

return 0;

}

unsigned WINAPI receiving_messages(void *arg) {

int hSock = *((SOCKET*)arg);

char name_messages[NAME_SIZE + BUFFER_SIZE];

int string_length;

while (1) {

string_length = recv(hSock, name_messages, NAME_SIZE + BUFFER_SIZE - 1, 0);

if (string_length == -1) {

return -1;

}

name_messages[string_length] = 0;

fputs(name_messages, stdout);

}

return 0;

}

void error_handling(char *messages) {

fputs(messages, stderr);

fputc(' ', stderr);

exit(1);

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!