|
|
|
|
Google Site
|
|||||||
| Форумы | Регистрация | Блог | Человек Страницы | Правила форума | Ссылки | Альбомы | ЧАВО | Пользователи | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Программирования высокого уровня Почтовые вопросы о C, C + +, Java, SQL и других языках программирования здесь. |
![]() |
|
|
Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|||
|
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 |
| Рекламные ссылки |
|
|
|
|||
|
Я на самом деле понял это:
Код:
bytes = recv(n_sockfd, recv_msg, 10, 0);
recv_msg[bytes] = '\0';
printf("%s\n", recv_msg);
И байтах явно один INT, что я вынужден был объявить. |
| Рекламные ссылки |
|
|
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|
Подробнее 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 |