The UNIX and Linux Forums  


Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
.
google unix.com



High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Socket programming in C sudharma High Level Programming 3 04-02-2009 09:51 AM
Socket programming in C nameless` High Level Programming 2 02-12-2009 01:38 PM
socket programming sureshvaikuntam IP Networking 1 04-21-2008 09:38 AM
Socket Programming socket soshell High Level Programming 2 06-29-2004 08:49 AM
Socket programming Nadeem Mistry High Level Programming 1 07-23-2001 05:33 AM

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #1 (permalink)  
Old 06-23-2009
htabesh htabesh is offline
Registered User
  
 

Join Date: Aug 2008
Posts: 8
Exclamation Socket Programming Send File

Hello my friends;

Look at this 2 program:

Client:


Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main ( int agrc, char *argv[] )
{
	int Socket;
	struct sockaddr_in Server_Address;	
	Socket = socket ( AF_INET, SOCK_STREAM, 0 );
	if ( Socket == -1 )
	{	
		printf ("Can Not Create A Socket!");	
	}
	int Port ;
	Port = atoi(argv[2]);	
	Server_Address.sin_family = AF_INET;
	Server_Address.sin_port = htons ( Port );
	Server_Address.sin_addr.s_addr = inet_addr(argv[1]);
	if ( Server_Address.sin_addr.s_addr == INADDR_NONE )
	{
		printf ( "Bad Address!" );
	}	
	connect ( Socket, (struct sockaddr *)&Server_Address, sizeof (Server_Address) );


        char *path;
        char *filename;
        path = "/home/hosein/Desktop/Project-30-3/Scan.pdf";
        filename = strrchr(path, '/') + 1;
        send(Socket,filename,sizeof(filename),0);

        FILE *in = fopen("1.tar.gz","r");
        char Buffer[2] = "";
        int len;
        while ((len = fread(Buffer,sizeof(Buffer),1, in)) > 0)
        {            
            send(Socket,Buffer,sizeof(Buffer),0);            
        }
        send(Socket,"Hi",sizeof(Buffer),0);

        char Buf[BUFSIZ];
	recv(Socket, Buf, BUFSIZ, 0);
        if ( strcmp (Buf,"ACK") == 0  )
        {
            printf("Recive ACK\n");
        }        
        close (Socket);
        fclose(in);
	return 0;	
}

Server:

Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main ( int agrc, char *argv[] )
{
	/******** Program Variable Define & Initialize **********/
	int Main_Socket; 	// Main Socket For Server
	int Communication_Socket; // Socket For Special Clients
	int Status; // Status Of Fucntion
	struct sockaddr_in Server_Address; // Address Of Server
	struct sockaddr_in Client_Address; // Address Of Client That Communicate Whit Server
	int Port ;
        char Buff[100] = "";
	Port = atoi(argv[2]);
	printf ("Server Communicating By Using Port %d\n", Port);
	/******** Create A Socket To Communicate With Server **********/
	Main_Socket = socket ( AF_INET, SOCK_STREAM, 0 );
	if ( Main_Socket == -1 )
	{
		printf ("Sorry System Can Not Create Socket!\n");
	}
	/******** Create A Address For Server To Communicate **********/
	Server_Address.sin_family = AF_INET;
	Server_Address.sin_port = htons(Port);
	Server_Address.sin_addr.s_addr = inet_addr(argv[1]);
	/******** Bind Address To Socket **********/
	Status = bind ( Main_Socket, (struct sockaddr*)&Server_Address, sizeof(Server_Address) );
	if ( Status == -1 )
	{
		printf ("Sorry System Can Not Bind Address to The Socket!\n");
	}
	/******** Listen To The Port to Any Connection **********/        
	listen (Main_Socket,12);	
	socklen_t Lenght = sizeof (Client_Address);
        while (1)
        {
            Communication_Socket = accept ( Main_Socket, (struct sockaddr*)&Client_Address, &Lenght );
            if (!fork())
            {

                char CH[8];
                recv(Communication_Socket, CH, sizeof(CH), 0);
                printf("%s\n",CH);
                
                FILE *fp=fopen("sample.tar.gz","w");
                while(1)
                {
                    char Buffer[2]="";
                    if (recv(Communication_Socket, Buffer, sizeof(Buffer), 0))
                    {
                        if ( strcmp (Buffer,"Hi") == 0  )
                        {
                            break;
                        }
                        else
                        {
                            fwrite(Buffer,sizeof(Buffer),1, fp);
                        }
                    }
                }
                fclose(fp);
                send(Communication_Socket, "ACK" ,3,0);
                printf("ACK Send");
		exit(0);
            }
        }
	return 0;
}

If I declare CH[x] ( x <= 8 ), everything work right and file will send in a true way. but with CH[x] ( x > 8 ) I can't send file! what's the problem?
 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 12:28 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0