Thread: trying to send a struct over a socket

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User
    Join Date
    Nov 2002
    Posts
    319

    trying to send a struct over a socket

    i am not seeing a = 50; b = 100; c = 200; in the recv buffer, i am only seeing a = 50;
    what is the problem?
    Code:
    // tcp.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <vector>
    #include <windows.h>
    #include <iostream>
    #include <list>
    #include <stdio.h>
    #include <d3dx9.h>
    #pragma comment(lib,"ws2_32.lib")
    
    using namespace std;
    
    class Data
    {
    public:
    	int a;
        int b;
        int c;
    protected:
    private:
    
    };
    
    class TcpClient
    {
    public:
    	void InitWinsock()
    	{
    		Result = WSAStartup(MAKEWORD(2, 2), &WSAdata);
    		if(Result == -1)
    		{
    			printf("%s\n","Setting Up Winsock Failed!");
    		}
    		else
    		{
    			printf("%s\n","Setting Up Winsock Success!");
    		}
    	}
    
    	void SetAddressInfo()
    	{
    		memset(&sins, 0, sizeof(sins));
    		ConnectSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    		sins.sin_family = AF_INET;
            sins.sin_port = htons(50);
    		sins.sin_addr.s_addr = inet_addr("192.168.1.100");
    	}
    
    	void ConnectInfo()
    	{
    	   if(connect(ConnectSock, (sockaddr *)&sins, sizeof(SOCKADDR_IN))== SOCKET_ERROR)
    	   { 
    		   printf("%s\n","Failed To Connect!");
    	   }
           else
    	   {
    		   printf("%s\n","Connected To Server!");
    	   }
    	}
    
    	void SendToSocket(char*Data)
    	{
    		while(1)
    		{
    		  // printf("%s\n","Enter Something To Send!");
    		  // cin >> Something;
    		   Result = send(ConnectSock,Data,sizeof(Data),0);
    		   if(Result == -1)
    		   {
    			  printf("%s\n","Failed To Send Data!");
    			  break;
    		   }
    		   else
    		   {
    			  printf("%s\n","Data Sent!");
    		   }
    		}
    		
    		
    	}
    
    protected:
    
    private:
    	WSADATA WSAdata;
    	SOCKET ConnectSock;
    	sockaddr_in sins;
    	int Result;
    	char Something[64];
    	
    	
    };
    
    class TcpServer
    {
    public:
    	void InitWinsock()
    	{
    		Result = WSAStartup(MAKEWORD(2, 2), &WSAdata);
    		if(Result == -1)
    		{
    			printf("%s\n","Setting Up Winsock Failed!");
    		}
    		else
    		{
    			printf("%s\n","Setting Up Winsock Success!");
    		}
    	}
    
    	void SetAddressInfo()
    	{
    		memset(&sins, 0, sizeof(sins));
    		ListenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    		sins.sin_family = AF_INET;
            sins.sin_port = htons(50);
    		sins.sin_addr.s_addr = inet_addr("192.168.1.100");
    	}
    
    	void BindnListen()
    	{
    		if( bind( ListenSock, (struct sockaddr*)&sins, sizeof( struct sockaddr)) == SOCKET_ERROR )
            {
    			printf("%s\n","Failed To Bind To Address!");
    		}
    	    else
    	    {
    			printf("%s\n","Binded To Address Success!");
    	    }
    
    		if(listen(ListenSock, 1)==SOCKET_ERROR)
    	    {
    			printf("%s\n","Failed To Listen On Address!");
    		}
    	    else
    	    {
    			printf("%s\n","Listening On Address!");
    		}
    	}
    	
    	void WaitForConnections()
    	{
    		while(1)
    		{
    			printf("%s\n","Waiting For Connections!");
    
    			AcceptSock = accept(ListenSock , (struct sockaddr*)&sins,0);
    		    if(AcceptSock == SOCKET_ERROR)
    		    {
    				printf("%s\n","No Connection Made Yet!");
    		    }
    		    else
    		    {
    				printf("%s\n","Connection Made!");
    				break;
    		    }
    	   }
    	}
    
    	void RecieveFromSocket()
    	{
    		while(1)
    		{
    			if(AcceptSock != INVALID_SOCKET)
    			{
    				recv(AcceptSock,(char*)&DataObject,sizeof(DataObject),0);
    				//RecvBuffer[strlen(RecvBuffer)-1] = '\0';
    		        printf("%d\n",DataObject.a);
    				printf("%d\n",DataObject.b);
    				printf("%d\n",DataObject.c);
    		    }
    			else
    			{
    				printf("%s\n","No Connection Yet!");
    			}
    		}
    	}
    
    	
    
    protected:
    
    private:
    	WSADATA WSAdata;
    	SOCKET ListenSock;
    	SOCKET AcceptSock;
    	sockaddr_in sins;
    	int Result;
    	char RecvBuffer[512];
    	Data DataObject;
    
    };
    
    
    
    #define SERVER
    //#define CLIENT
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	Data DataObject;
    	DataObject.a = 50;
    	DataObject.b = 100;
    	DataObject.c = 200;
    
    #ifndef CLIENT
    
    	TcpClient TcpClientObject;
    	TcpClientObject.InitWinsock();
    	TcpClientObject.SetAddressInfo();
    	TcpClientObject.ConnectInfo();
    	TcpClientObject.SendToSocket((char*)&DataObject);
    
    #endif
    	
    	
    #ifndef SERVER
    	
    	TcpServer TcpServerObject;
    	TcpServerObject.InitWinsock();
    	TcpServerObject.SetAddressInfo();
    	TcpServerObject.BindnListen();
    	TcpServerObject.WaitForConnections();
    	TcpServerObject.RecieveFromSocket();
    
    #endif
    	
    	
    
    	
    
    	
    	
    
    	return 0;
    }
    Last edited by Anddos; 06-20-2009 at 02:28 PM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Casting a struct for sending to socket
    By chrisjmoss in forum Networking/Device Communication
    Replies: 6
    Last Post: 04-08-2008, 09:11 AM
  2. Looking for a way to store listbox data
    By Welder in forum C Programming
    Replies: 20
    Last Post: 11-01-2007, 11:48 PM
  3. Socket or send() problem?
    By Achy in forum C Programming
    Replies: 5
    Last Post: 06-09-2006, 01:09 PM
  4. Request for comments
    By Prelude in forum A Brief History of Cprogramming.com
    Replies: 15
    Last Post: 01-02-2004, 10:33 AM
  5. Bi-Directional Linked Lists
    By Thantos in forum C Programming
    Replies: 6
    Last Post: 12-11-2003, 10:24 AM