Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Слепить(все готовое) клиент, сервер и crc???!!!

Ответить
Настройки темы
C/C++ - Слепить(все готовое) клиент, сервер и crc???!!!

Пользователь


Сообщения: 96
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Здравствуйте, такая вот досада, с бухты барахты нужно сделать вот такую вот программу. Как то проверять на ошибки сообщение к серверу, я же давным давно на "С" ничего не делал. И куча констант и так д.. половину синтаксиса не понятно.

В общем прошу помощи! Весь код имеется, нужно только чуток допилить.

Нужно проверить сообщение которое отсылается на сервер с помощью CRC-суммы. Если не сходится crc, то отсылать заново.

Сервер.

Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>

void error(const char *msg)
{
    perror(msg);
    exit(1);
}

int main(int argc, char *argv[])
{
     int sockfd, newsockfd, portno;
     socklen_t clilen;
     char buffer[256];
     struct sockaddr_in serv_addr, cli_addr;
     int n;
     //if (argc < 2) {
     //    fprintf(stderr,"ERROR, no port provided\n");
     //    exit(1);
     //}
     
     sockfd = socket(AF_INET, SOCK_STREAM, 0);
     if (sockfd < 0) 
        error("ERROR opening socket");
     bzero((char *) &serv_addr, sizeof(serv_addr));

     // set SO_REUSEADDR on a socket to true (1):
	 int optval = 1;
	 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval);

     //portno = atoi(argv[1]);
     portno = 3334;
     serv_addr.sin_family = AF_INET;
     serv_addr.sin_addr.s_addr = INADDR_ANY;
     serv_addr.sin_port = htons(portno);
     if (bind(sockfd, (struct sockaddr *) &serv_addr,
              sizeof(serv_addr)) < 0) 
              error("ERROR on binding");
     listen(sockfd,5);
     clilen = sizeof(cli_addr);
     newsockfd = accept(sockfd, 
                 (struct sockaddr *) &cli_addr, 
                 &clilen);
     if (newsockfd < 0) 
          error("ERROR on accept");
     bzero(buffer,256);
     n = read(newsockfd,buffer,255);
     if (n < 0) error("ERROR reading from socket");
     printf("Here is the message: %s\n",buffer);
     n = write(newsockfd,"I got your message",18);
     if (n < 0) error("ERROR writing to socket");
     close(newsockfd);
     close(sockfd);
     return 0; 
}
Клиент
Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 

void error(const char *msg)
{
    perror(msg);
    exit(0);
}

int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    //if (argc < 3) {
    //   fprintf(stderr,"usage %s hostname port\n", argv[0]);
    //   exit(0);
    //}
    portno = 3334;	//atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    //server = gethostbyname(argv[1]);
    server = gethostbyname("127.0.0.1");
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    n = write(sockfd,buffer,strlen(buffer));
    if (n < 0) 
         error("ERROR writing to socket");
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0) 
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    close(sockfd);
    return 0;
}
CRC
Код: Выделить весь код
#include <stdio.h>
long int ll = 0;

unsigned int hackers_delight_crc32(unsigned char *message) 
{
	int i, j;
	unsigned int byte, crc, mask;
	i = 0;
	crc = 0xFFFFFFFF;
	while (message[i] != 0) {
		byte = message[i]; // Get next byte.
		crc = crc ^ byte;
		for (j = 7; j >= 0; j--) { // Do eight times.
			mask = -(int)(crc & 1);
			crc = (crc >> 1) ^ (0xEDB88320 & mask);
		}
		i = i + 1;
	}
	return ~crc;
}

int main()
{
	unsigned char message[] = "0123456789";
	unsigned int crc;
	// gives 0xcbf43926
	// this matches http://www.zorc.breitbandkatze.de/crc.html

	unsigned int original_crc = hackers_delight_crc32(message);
	printf( "original message: %s crc=0x%08X\n", message, original_crc );

	// Finden wir eine zweite Nachricht mit demselben CRC ?
	// Nein, ist schwer zu ifnedn, aber nicht unmöglich
	for( unsigned char c = 'A'; c<='Z'; c++ )
	{
		for( unsigned char d = 'A'; d<='Z'; d++ )
		{
			for( unsigned char e = 'A'; e<='Z'; e++ )
			{
				for( unsigned char f = 'A'; f<='Z'; f++ )
				{
					for( unsigned char g = 'A'; g<='Z'; g++ )
					{
						message[3] = c;
						message[5] = d;
						message[7] = e;
						message[8] = f;
						message[9] = g;
						crc = hackers_delight_crc32(message);
						ll++;
						if( crc == original_crc )
						{
							printf( "message: %s crc=0x%08X\n", message, crc );
							printf("DUPLICATE MESSAGE FOUND WITH SAME CRC\n");
						}
					}
				}
			}
		}
	}
	printf( "attempts: %ld \n", ll );
}
Спасибо огромное!

Отправлено: 17:04, 09-06-2012

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Слепить(все готовое) клиент, сервер и crc???!!!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Антивирусы - Защищать клиент или сервер? exo Защита компьютерных систем 4 07-11-2011 16:27
Игровой сервер-клиент Luka55555 Хочу все знать 4 02-10-2011 10:03
Java - Коммуникация Клиент-Клиент, Клиент-Сервер pivster Программирование и базы данных 6 17-06-2011 15:51
сервер терминалов - клиент VPN osaka Microsoft Windows NT/2000/2003 1 26-04-2010 01:40
Чем слепить GIF ? Pa3pyxa Вебмастеру 3 05-09-2003 23:36




 
Переход