How to send Image Files to server using winsock in C++
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 1 of 1

Thread: How to send Image Files to server using winsock in C++

  1. #1
    Join Date
    Apr 2017
    Posts
    7

    How to send Image Files to server using winsock in C++

    I am using Visual Studio 2013.

    I have developed a simple client and server application using winsock API in C++ where the client sends normal message to the server. But, I want to send multiple images to server from the client socket. I don't know how to send image files using socket programming. Please help me with sending of multiple image files using winsock.

    My code is as under:

    Client:
    Code:
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    
    using namespace std;
    
    
    // Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
    #pragma comment (lib, "Ws2_32.lib")
    #pragma comment (lib, "Mswsock.lib")
    #pragma comment (lib, "AdvApi32.lib")
    
    
    #define DEFAULT_BUFLEN 512
    #define DEFAULT_PORT "27015"
    
    int main(int argc, char **argv)
    {
    	WSADATA wsaData;
    	SOCKET ConnectSocket = INVALID_SOCKET;
    	struct addrinfo *result = NULL,
    		*ptr = NULL,
    		hints;
    	char *sendbuf = "this is a test";
    	char recvbuf[DEFAULT_BUFLEN];
    	int iResult;
    	int recvbuflen = DEFAULT_BUFLEN;
    
    	// Validate the parameters
    	if (argc != 2) {
    		cout << "usage: %s server-name" << argv[0];
    		return 1;
    	}
    
    	// Initialize Winsock
    	iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    	if (iResult != 0) {
    		cout << "WSAStartup failed with error: " << iResult;
    		return 1;
    	}
    
    	ZeroMemory(&hints, sizeof(hints));
    	hints.ai_family = AF_UNSPEC;
    	hints.ai_socktype = SOCK_STREAM;
    	hints.ai_protocol = IPPROTO_TCP;
    
    	// Resolve the server address and port
    	iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result);
    	if (iResult != 0) {
    		cout << "getaddrinfo failed with error: " << iResult;
    		WSACleanup();
    		return 1;
    	}
    
    	// Attempt to connect to an address until one succeeds
    	for (ptr = result; ptr != NULL; ptr = ptr->ai_next) {
    
    		// Create a SOCKET for connecting to server
    		ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
    			ptr->ai_protocol);
    		if (ConnectSocket == INVALID_SOCKET) {
    			cout << "socket failed with error: " << WSAGetLastError();
    			WSACleanup();
    			return 1;
    		}
    
    		// Connect to server.
    		iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
    		if (iResult == SOCKET_ERROR) {
    			closesocket(ConnectSocket);
    			ConnectSocket = INVALID_SOCKET;
    			continue;
    		}
    		break;
    	}
    
    	freeaddrinfo(result);
    
    	if (ConnectSocket == INVALID_SOCKET) {
    		cout << "Unable to connect to server!\n";
    		WSACleanup();
    		return 1;
    	}
    
    	// Send an initial buffer
    	iResult = send(ConnectSocket, sendbuf, (int)strlen(sendbuf), 0);
    	if (iResult == SOCKET_ERROR) {
    		cout << "send failed with error: " << WSAGetLastError();
    		closesocket(ConnectSocket);
    		WSACleanup();
    		return 1;
    	}
    
    	cout << "Bytes Sent: ", iResult;
    
    	// shutdown the connection since no more data will be sent
    	iResult = shutdown(ConnectSocket, SD_SEND);
    	if (iResult == SOCKET_ERROR) {
    		cout << "shutdown failed with error: " << WSAGetLastError();
    		closesocket(ConnectSocket);
    		WSACleanup();
    		return 1;
    	}
    
    	// Receive until the peer closes the connection
    	do {
    
    		iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
    		if (iResult > 0)
    			cout << "Bytes received: " << iResult;
    		else if (iResult == 0)
    			cout << "Connection closed\n";
    		else
    			cout << "recv failed with error: " << WSAGetLastError();
    
    	} while (iResult > 0);
    
    	// cleanup
    	closesocket(ConnectSocket);
    	WSACleanup();
    
    	return 0;
    }

    Server:
    Code:
    #undef UNICODE
    
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    
    using namespace std;
    
    // Need to link with Ws2_32.lib
    #pragma comment (lib, "Ws2_32.lib")
    // #pragma comment (lib, "Mswsock.lib")
    
    #define DEFAULT_BUFLEN 512
    #define DEFAULT_PORT "27015"
    
    int main(void)
    {
    	WSADATA wsaData;
    	int iResult;
    
    	SOCKET ListenSocket = INVALID_SOCKET;
    	SOCKET ClientSocket = INVALID_SOCKET;
    
    	struct addrinfo *result = NULL;
    	struct addrinfo hints;
    
    	int iSendResult;
    	char recvbuf[DEFAULT_BUFLEN];
    	int recvbuflen = DEFAULT_BUFLEN;
    
    	// Initialize Winsock
    	iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    	if (iResult != 0) {
    		cout << "WSAStartup failed with error: %d\n", iResult;
    		return 1;
    	}
    
    	ZeroMemory(&hints, sizeof(hints));
    	hints.ai_family = AF_INET;
    	hints.ai_socktype = SOCK_STREAM;
    	hints.ai_protocol = IPPROTO_TCP;
    	hints.ai_flags = AI_PASSIVE;
    
    	// Resolve the server address and port
    	iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    	if (iResult != 0) {
    		cout << "getaddrinfo failed with error: " << iResult;
    		WSACleanup();
    		return 1;
    	}
    
    	// Create a SOCKET for connecting to server
    	ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    	if (ListenSocket == INVALID_SOCKET) {
    		cout << "socket failed with error: " << WSAGetLastError();
    		freeaddrinfo(result);
    		WSACleanup();
    		return 1;
    	}
    
    	// Setup the TCP listening socket
    	iResult = bind(ListenSocket, result->ai_addr, (int)result->ai_addrlen);
    	if (iResult == SOCKET_ERROR) {
    		cout << "bind failed with error: " << WSAGetLastError();
    		freeaddrinfo(result);
    		closesocket(ListenSocket);
    		WSACleanup();
    		return 1;
    	}
    
    	freeaddrinfo(result);
    
    	iResult = listen(ListenSocket, SOMAXCONN);
    	if (iResult == SOCKET_ERROR) {
    		cout << "listen failed with error: " << WSAGetLastError();
    		closesocket(ListenSocket);
    		WSACleanup();
    		return 1;
    	}
    
    	// Accept a client socket
    	ClientSocket = accept(ListenSocket, NULL, NULL);
    	if (ClientSocket == INVALID_SOCKET) {
    		cout << "accept failed with error: " << WSAGetLastError();
    		closesocket(ListenSocket);
    		WSACleanup();
    		return 1;
    	}
    
    	// No longer need server socket
    	closesocket(ListenSocket);
    
    	// Receive until the peer shuts down the connection
    	do {
    
    		iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
    		if (iResult > 0) {
    			cout << "Bytes received: " << iResult;
    
    			// Echo the buffer back to the sender
    			iSendResult = send(ClientSocket, recvbuf, iResult, 0);
    			if (iSendResult == SOCKET_ERROR) {
    				cout << "send failed with error: " << WSAGetLastError();
    				closesocket(ClientSocket);
    				WSACleanup();
    				return 1;
    			}
    			cout << "Bytes sent: " << iSendResult;
    		}
    		else if (iResult == 0)
    			cout << "Connection closing...\n";
    		else  {
    			cout << "recv failed with error: " << WSAGetLastError();
    			closesocket(ClientSocket);
    			WSACleanup();
    			return 1;
    		}
    
    	} while (iResult > 0);
    
    	// shutdown the connection since we're done
    	iResult = shutdown(ClientSocket, SD_SEND);
    	if (iResult == SOCKET_ERROR) {
    		cout << "shutdown failed with error: " << WSAGetLastError();
    		closesocket(ClientSocket);
    		WSACleanup();
    		return 1;
    	}
    
    	// cleanup
    	closesocket(ClientSocket);
    	WSACleanup();
    
    	return 0;
    }
    Last edited by raushanaj5; September 7th, 2017 at 11:19 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This a Codeguru.com survey!


On-Demand Webinars (sponsored)