The UNIX and Linux Forums  
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.

Go Back   В UNIX и Linux Форумы > Топ форумы > Программирования высокого уровня
.
Google unix.com



Программирования высокого уровня Почтовые вопросы о C, C + +, Java, SQL и других языках программирования здесь.

Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Socket программирования на C sudharma Программирования высокого уровня 3 04-02-2009 08:51 AM
Socket программирования на C безымянный ` Программирования высокого уровня 2 02-12-2009 01:38 PM
Розетка программирования sureshvaikuntam Сеть IP 1 04-21-2008 08:38 AM
Socket Программирование розетка soshell Программирования высокого уровня 2 06-29-2004 07:49 AM
Socket программирования Надимом Mistry Программирования высокого уровня 1 07-23-2001 04: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 Оценить Thread Режимы дисплея
Old 06-23-2009
htabesh htabesh is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2008
Сообщений: 8
Exclamation Socket Программирование Send File

Здравствуйте, мои друзья;

Посмотрите на эту программу 2:

Клиент:

Код:
#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;	
}
Сервер:
Код:
#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;
}
Если я объявляю CH [X] (X <\u003d 8), все работы правой и файл будет посылать на верный путь. но с СН [X] (X> 8) Я не могу отправить файл! В чем проблема?
Old 06-23-2009
pludi's Avatar
pludi pludi is offline Forum Staff  
Модератор
  
 

Регистрация: Декабрь 2008
Местонахождение:. На
Сообщения: 1,857
Позвольте мне угадать, вы составление на 64-битной архитектуры.

sizeof () представляет собой компиляцию время обучения и, в вашем случае, вернуть размер указателя на символ массива. Попробуйте объявить макрос на размер массива И использовать этот макрос для Recv () слово.
Old 06-23-2009
htabesh htabesh is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2008
Сообщений: 8
Нет! Я не пользуюсь 64 битной архитектуры! Я стараюсь strlen () вместо sizeof ()! есть проблема только в получении имя файла (Recv (Communication_Socket, CH, sizeof (СН), 0);
Я не знаю почему!
Old 06-25-2009
mgessner mgessner is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2007
Сообщений: 50
Цитата:
Первоначально Послано pludi View Post
sizeof () представляет собой компиляцию времени обучения
Я NIT-сбор, но это не всегда так, что это компиляция sizeof времени.

C99 позволяет sizeof для выполнения для VLA's.

---------- Пост обновлен в 09:57 AM ---------- Предыдущее обновление было в 09:56 AM ----------

Для ОП: это было бы хорошей идеей, чтобы проверить возвращения ценностей из всех розетка и I / O функции вы используете ... Вы слепой полет, не зная, что происходит.
Old 06-23-2009
pludi's Avatar
pludi pludi is offline Forum Staff  
Модератор
  
 

Регистрация: Декабрь 2008
Местонахождение:. На
Сообщения: 1,857
ОК тогда, что именно вы имеете в виду под "не может отправить файл"? Ли Recv () блоком, является файл поврежден, будет не в конце программы?
Old 06-23-2009
htabesh htabesh is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2008
Сообщений: 8
Есть ли возможность для тестирования и составить программу, что 2?
Спасибо за вашу доброту.
Reply

Закладки

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 08:19 AM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0