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



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered By Powered by Google
 
Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 05-12-2007
Зарегистрированный пользователь
 

Регистрация: Февраль 2007
Сообщений: 67
C Сети Программирование - Recv () поможет

Поэтому я сделать программу, которая получает IP-адрес на веб-сайте введена, а затем посылает IP-адресов в введена пребывания. Эта программа не имеет реального значения, но только обучение эксперимента. Так что я успешно сделал программу, то я хотел бы попробовать Recv (), И он производит некоторые странные вывода; здесь является источником:

Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h> /* exit() */
#include <errno.h> /* herror() */
#include <netdb.h> /* gethostbyname() */
#include <sys/types.h> /* bind() accept() */
#include <sys/socket.h> /* bind() accept() */

#define PORT 3490

main(int argc, char *argv[]) {
	int sockfd, n_sockfd, sin_size, len;
	char *host_addr, *recv_msg;
	struct hostent *host;
	struct sockaddr_in my_addr;
	struct sockaddr_in their_addr;

	if (argc != 3) {
		fprintf(stderr, "usage: %s [hostname] [ip address]\n",
		        argv[0]);
		exit(1);
	}
	if ((host = gethostbyname(argv[1])) == NULL) {
		herror("gethostbyname");
		exit(1);
	}
	if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
		perror("socket");
		exit(1);
	}

	my_addr.sin_family = AF_INET;
	my_addr.sin_port = htons(PORT);
	my_addr.sin_addr.s_addr = inet_addr(argv[2]);
	memset(my_addr.sin_zero, '\0', sizeof my_addr.sin_zero);

	if ((bind(sockfd, (struct sockaddr *)&my_addr,
	     sizeof(struct sockaddr))) == -1) {
		perror("bind");
		exit(1);
	}
	if ((listen(sockfd, 10)) == -1) {
		perror("socket");
		exit(1);
	}
	sin_size = sizeof(struct sockaddr_in);
	if ((n_sockfd = accept(sockfd, (struct sockaddr *)&their_addr,
	    &sin_size)) == -1) {
		perror("accept");
		exit(1);
	}
	close(sockfd);

	host_addr = inet_ntoa(*((struct in_addr *)host->h_addr));

	len = strlen(host_addr);
	send(n_sockfd, host_addr, len, 0);
	len = strlen("\n");
	send(n_sockfd, "\n", len, 0);

	recv(n_sockfd, recv_msg, 10, 0);
	printf("%s\n", recv_msg);

	close(n_sockfd);
}

А вот мои вещи в командной строке:

Программа в действии:

Код:
~/c/network/testing $ ./hostinfo google.com 127.0.0.1
hello
� +������F��V��f��v����
                       ~/c/network/testing $

И тот же компьютер, взаимодействующих с ним:

Код:
~ $ telnet 127.0.0.1 3490
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
64.233.167.99
hello
Connection closed by foreign host.
~ $

Как то, что с + FVfv?

Спасибо за чтение,
Octal
Рекламные ссылки
Old 05-12-2007
Perderabo's Avatar
Unix Daemon
 

Регистрация: август 2001
Место проведения: Ashburn, Вирджиния
Сообщения: 9148
Вы проверка кода возврата из розетки вызова. Сделайте то же самое с Recv () и отправки (). Если Recv неудачно, буфер нетронутыми, и Вы просто распечатать любой мусор был в нем.
Old 05-12-2007
Зарегистрированный пользователь
 

Регистрация: Февраль 2007
Сообщений: 67
Я на самом деле понял это:

Код:
bytes = recv(n_sockfd, recv_msg, 10, 0);
recv_msg[bytes] = '\0';
printf("%s\n", recv_msg);

И байтах явно один INT, что я вынужден был объявить.
Рекламные ссылки
Closed Thread

Закладки

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

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

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

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


Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Recv syscall розетка для программирования heljy Программирования высокого уровня 2 06-16-2008 08:24 AM
Сети Программирование в Unix powermind Программирования высокого уровня 2 09-02-2006 08:46 AM
Сетевое программирование на C vibhory2j Программирования высокого уровня 1 04-15-2004 01:57 PM
Программирование TCP проблемы с 'Recv' KrazyGuyPaul Сеть IP 1 09-12-2002 06:17 PM
Сетевое программирование darkspace Программирования высокого уровня 2 05-21-2002 08:20 AM



Часовой пояс GMT -4. Текущее время 10:01 PM.


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

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