The UNIX and Linux Forums  
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.

Go Back   Die UNIX-und Linux-Foren > Top Foren > High-Level-Programmierung
.
Google unix.com



High-Level-Programmierung Post Fragen zu C, C + +, Java, SQL, und andere Programmiersprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
Socket-Programmierung in C sudharma High-Level-Programmierung 3 04-02-2009 09:51 AM
Socket-Programmierung in C namenlosen " High-Level-Programmierung 2 02-12-2009 01:38 PM
Socket-Programmierung sureshvaikuntam IP-Networking 1 04-21-2008 09:38 AM
Socket Socket-Programmierung soshell High-Level-Programmierung 2 06-29-2004 08:49 AM
Socket-Programmierung Nadeem Mistry High-Level-Programmierung 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 Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 06-23-2009
htabesh htabesh is offline
Registrierte Nutzer
  
 

Join Date: Aug 2008
Beiträge: 8
Exclamation Socket-Programmierung "Datei senden"

Hallo meine Freunde;

Schauen Sie sich dieses 2-Programm:

Kunde:

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;
}
Wenn ich erklären, CH [x] (x <\u003d 8), alles funktioniert und Datei wird in einer Art und Weise wahr. aber mit CH [x] (x> 8) Ich kann keine Datei! Was ist das Problem?
  #2 (permalink)  
Old 06-23-2009
pludi's Avatar
pludi pludi is online now Forum Staff  
Moderator
  
 

Join Date: Dezember 2008
Lage:. Auf
Posts: 1872
Lassen Sie mich raten, du bist der Kompilierung auf einem 64-Bit-Architektur.

sizeof () ist eine Compile-Zeit Unterricht und wird in Ihrem Fall, Rückkehr der Größe der Zeiger für die Zeichen-Array. Versuchen Sie, die Vereinbarkeit der ein Makro für die Größe des Arrays & Makro verwenden, dass für die recv ()-Aufruf.
  #3 (permalink)  
Old 06-23-2009
htabesh htabesh is offline
Registrierte Nutzer
  
 

Join Date: Aug 2008
Beiträge: 8
Nein! Ich verwende 64-Bit-Architektur! Ich versuche strlen () anstelle von sizeof ()! JUST Problem gibt es bei der Aufnahme von Datei-Name (recv (Communication_Socket, CH, sizeof (CH), 0);
Ich weiß nicht, warum!
  #4 (permalink)  
Old 06-25-2009
mgessner mgessner is offline
Registrierte Nutzer
  
 

Join Date: Oct 2007
Beiträge: 50
Zitat:
Zitat von pludi View Post
sizeof () ist eine Compile-Zeit-Anweisung
Ich bin nit-picking, aber es ist nicht immer der Fall ist, dass sizeof Compile-Zeit.

C99 erlaubt sizeof werden für die Laufzeit des VLA.

---------- Post aktualisiert am 09:57 ---------- zurück Update wurde auf 09.56 Uhr ----------

Zum OP: Es wäre eine gute Idee, um die Rückgabe von Werten aus der Steckdose und I / O-Funktionen, die Sie gerade verwenden ... Sie sind im Blindflug, ohne zu wissen, was los ist.
  #5 (permalink)  
Old 06-23-2009
pludi's Avatar
pludi pludi is online now Forum Staff  
Moderator
  
 

Join Date: Dezember 2008
Lage:. Auf
Posts: 1872
OK dann, was genau meinen Sie mit "Datei kann nicht senden!"? Ist recv () blockiert, ist die Datei beschädigt, wird das Programm nicht zu Ende sein?
  #6 (permalink)  
Old 06-23-2009
htabesh htabesh is offline
Registrierte Nutzer
  
 

Join Date: Aug 2008
Beiträge: 8
Ist es möglich für Sie zu testen und zu kompilieren, dass 2-Programm?
Vielen Dank für Ihre Freundlichkeit.
Reply

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 04:28 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0