The UNIX and Linux Forums  


Go Back   A UNIX és Linux Forums > Top Fórumok > Magas szintű Programozás
.
google unix.com



Magas szintű Programozás Post kérdések C, C + +, Java, SQL, és más programozási nyelvek itt.

Több, UNIX és Linux fórum témák Ön által talált Hasznos
Szál Thread Starter Fórum Válaszok Utolsó hozzászólás
Socket programozás C-ben sudharma Magas szintű Programozás 3 04-02-2009 09:51 AM
Socket programozás C-ben névtelen " Magas szintű Programozás 2 02-12-2009 01:38 PM
socket programozás sureshvaikuntam IP Networking 1 04-21-2008 09:38 AM
Socket Programozás aljzat soshell Magas szintű Programozás 2 06-29-2004 08:49 AM
Socket programozás Nadeem Mistry Magas szintű Programozás 1 07-23-2001 05:33 AM

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Téma eszközök Keresés a téma Rate Thread Megjelenítési módok
  #1 (permalink)  
Old 06-23-2009
htabesh htabesh is offline
Regisztrált felhasználó
  
 

Join Date: Aug 2008
Hozzászólások: 8
Exclamation Socket Programozás Fájl küldése

Hello my friends;

Nézd meg ezt a 2 program:

Ügyfél:


Kód:
#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:

Kód:
#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;
}

Ha kijelentem, CH [x] (x <\u003d 8), minden munkát és jobb kép küld egy igaz utat. de CH [x] (x> 8) nem tudok küldeni fájlt! Mi a probléma?
  #2 (permalink)  
Old 06-23-2009
pludi's Avatar
pludi pludi is offline Forum Staff  
Moderátor
  
 

Join Date: Dec 2008
Helyszín:. A
Hozzászólások: 1.947
Hadd találjam ki, te összeállítást egy 64bit építészet.

sizeof () a compile-time oktatást és az akarat, az Ön esetében, vissza méretét a mutató a karakter tömbben. Próbálja nyilvánítja a makró a mérete a tömbben és felhasználása, hogy a makro recv () hívást.
  #3 (permalink)  
Old 06-23-2009
htabesh htabesh is offline
Regisztrált felhasználó
  
 

Join Date: Aug 2008
Hozzászólások: 8
Nem! Nem használok 64 bites architektúra! Próbálom strlen () helyett a sizeof ()! van a probléma csak a fogadó fájl neve (recv (Communication_Socket, CH, sizeof (CH), 0);
Nem tudom miért!
  #4 (permalink)  
Old 06-25-2009
mgessner mgessner is offline
Regisztrált felhasználó
  
 

Join Date: Oct 2007
Hozzászólások: 50
Idézet:
Originally Posted by pludi View Post
sizeof () a compile-time utasítás
Én NIT-szedés, de ez nincs mindig így, hogy a sizeof a compile-time.

C99 sizeof lehetővé teszi, hogy futásidőben a VLA's.

---------- Post frissíteni 09:57 ---------- Előző frissítés volt 09:56 ----------

Az OP: ez egy jó ötlet, hogy ellenőrizze a visszatérési érték az összes csatlakozó és I / O funkciókat ön használ ... you're flying vak, nem tudja, mi történik.
  #5 (permalink)  
Old 06-23-2009
pludi's Avatar
pludi pludi is offline Forum Staff  
Moderátor
  
 

Join Date: Dec 2008
Helyszín:. A
Hozzászólások: 1.947
OK akkor, mi is pontosan érti ezt a "nem küldhet fájlt!"? Tárgytalan recv () tömb, a fájl sérült, akkor a program végén?
  #6 (permalink)  
Old 06-23-2009
htabesh htabesh is offline
Regisztrált felhasználó
  
 

Join Date: Aug 2008
Hozzászólások: 8
Van-e lehetőség az Ön számára, hogy teszteljék és összeállítani, hogy a 2 program?
Köszönöm a kedvességét.
Reply

Könyvjelzõk

Téma eszközök Keresés a téma
Keresés a téma:

Részletes keresés
Megjelenítési módok Rate this thread
Rate this thread:

Posting szabályzat
Ön nem post new threads
Ön nem post válaszok
Ön nem post Csatolmányok
Ön nem szerkeszteni az üzeneteidet

BB kód van Be
Smilies vannak Be
[IMG] kód Be
HTML kód Ki
Trackbacks vannak Be
Pingbacks vannak Be
Refbacks vannak Be




Minden idő GMT -4. Az idő most 12:51 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Nyelvre lefordítva Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
A UNIX és Linux Fórum Tartalom Copyright © 1993-2009. Minden jog Reserved.Ad menedzsment RedTyger

Content Relevant URLs by vBSEO 3.2.0