URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3043
[ Назад ]

Исходное сообщение
"segmentation fault на сокете"

Отправлено bison , 09-Июн-04 12:25 
есть две проги - клиент и сервер.клиент посылает серверу сообщение,а сервер его принимает и отображает на экране.
Если посылать всего одно сообщение ,то все нормально.Но вот если организовать цикл отправки и приема сообщений,то клиент после первого сообщения пишет об ошибке Segmentation fault,а сервер не откликается.
это сервер:
s_new = accept (s, &from_sin, &from_len);
perror("Accept");
while(1) {

from_len = read (s_new, buf, BUF_SIZE);
write (1, buf, from_len);
if(strcmp(buf,"kill")==0) {
         printf("\nExiting\n");
         exit(0);
}
}
shutdown (s_new, 0);
close (s_new);

}
Клиент:
while(1) {
scanf("%s",&input);

send (s, input, sizeof(input), 0);

if(strcmp(s,"kill")==0) {
       printf("Exiting...\n");
exit(0);
}
}
perror("SEND()");
close (s);


Содержание

Сообщения в этом обсуждении
"segmentation fault на сокете"
Отправлено Vladislav Lazarenko , 09-Июн-04 16:36 
>есть две проги - клиент и сервер.клиент посылает серверу сообщение,а сервер его
>принимает и отображает на экране.
>Если посылать всего одно сообщение ,то все нормально.Но вот если организовать цикл
>отправки и приема сообщений,то клиент после первого сообщения пишет об ошибке
>Segmentation fault,а сервер не откликается.
>это сервер:
>s_new = accept (s, &from_sin, &from_len);
> perror("Accept");
> while(1) {
>
> from_len = read (s_new, buf, BUF_SIZE);
> write (1, buf, from_len);
> if(strcmp(buf,"kill")==0) {
>         printf("\nExiting\n");
>         exit(0);
> }
> }
> shutdown (s_new, 0);
> close (s_new);
>
> }
>Клиент:
>while(1) {
> scanf("%s",&input);
>
> send (s, input, sizeof(input), 0);
>
>if(strcmp(s,"kill")==0) {
>       printf("Exiting...\n");
>exit(0);
>}
>}
>perror("SEND()");
> close (s);

scanf .... strcmp ....... ;)

P.S.: лучше используй вещи типа shutdown(sock, SHUT_RDWR).. вместо 0.. и т.п.


"segmentation fault на сокете"
Отправлено putty , 09-Июн-04 17:25 

>scanf .... strcmp ....... ;)
>
посоветуйте плз что использовать.....
>P.S.: лучше используй вещи типа shutdown(sock, SHUT_RDWR).. вместо 0.. и т.п.
все с ошибками разобрался,теперь клиент - сервер обмениваются сообщениями  без ошибок.Одно но - после send() вылезает Illegal seek,это не еррор,типа warning,но что это конкретно?


"segmentation fault на сокете"
Отправлено Vladislav Lazarenko , 09-Июн-04 17:28 
>
>>scanf .... strcmp ....... ;)
>>
>посоветуйте плз что использовать.....
>>P.S.: лучше используй вещи типа shutdown(sock, SHUT_RDWR).. вместо 0.. и т.п.
>все с ошибками разобрался,теперь клиент - сервер обмениваются сообщениями  без ошибок.Одно
>но - после send() вылезает Illegal seek,это не еррор,типа warning,но что
>это конкретно?


Не знаю, что и где там вылазиет, очень редко доводится на таком уровне программировать, но вместо scanf вообще выбрось в мусор, а вместо strcmp юзай strncmp etc.

А лучше std::string, CORBA и так далее :)