![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| koliyan |
|
|||
|
Unregistered |
Написанная программа выдает ошибку: Socket operation on non-socket
в функции recv(); /*-----------------simpleserver-------------------*/ /*Обозначения*/ /*-IM-информационное сообщение-*/ /*-EM-ошибка-*/ void childFunc(int client); void childFunc(int client) { char buFFer[1024]; bzero(buFFer,sizeof(buFFer)); int numBytes=0; numBytes = recv(client,buFFer,sizeof(buFFer),0); if (numBytes>0) cout << buFFer << endl; else { perror("Nofing was send" ); } int fd; if ((fd=open(buFFer,O_WRONLY | O_CREAT,0666))<0) { send(client,"Create fail",sizeof(buFFer),0); }else{ send(client,"Create success",sizeof(buFFer),0); } bzero(buFFer, sizeof(buFFer)); if (numBytes = read(client,buFFer,sizeof(buFFer)) <0) { perror("Read: "); }else { write(fd,buFFer,sizeof(buFFer)); } close(fd); } Помогите разобраться пожулуйста. |
|||
|
||||
| Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
А как ты получаешь client
-------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
| koliyan |
|
|||
|
Unregistered |
Ars
if( client = accept( sockDes, (struct sockaddr *) & clientAddr , sizeof(clientAddr)) < 0) /*ожидание подключения*/ perror("Accept"); - выдавало BAD ADRESS и я переделал в if( client = accept( sockDes, 0 , 0) /*ожидание подключения*/ perror("Accept"); |
|||
|
||||
| Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
Я имею ввиду от socket (от создания сокета)
-------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
| koliyan |
|
|||
|
Unregistered |
int main(void)
{ int sockDes; int numCon = 1; cout << "Server start's!" << endl; cout << "Getting socket descriptor...." << endl; /*Создание сокета*/ if ((sockDes=socket(PF_INET,SOCK_STREAM,0/*protocol=0*/))<0)/*здесь происходит получение дескриптора сокета*/ { perror("Socket()"); }else { cout << "Successfully get's socket descriptor." << endl; } /*Инициализация параметров для вызова функции bind() */ cout << "Initialization bind() parametrs...." << endl; #define PORT 7000 /*задаем номер порта*/ struct sockaddr_in clientAddr; bzero(&clientAddr, sizeof(clientAddr)); /*начальное обнуление структуры dest*/ clientAddr.sin_family = AF_INET; /*выбираем протокол AF_INET*/ clientAddr.sin_port = htons(PORT); /*выбираем наш порт PORT(5000)*/ clientAddr.sin_addr.s_addr=INADDR_ANY; /*любой IP адрес*/ cout << "Initialization succesed." << endl; /*Привязка порта к сокету. Вызов функции bind()*/ cout << "Starting bind...." << endl; /*IM*/ if ( bind(sockDes, (struct sockaddr *) &clientAddr ,sizeof(clientAddr) ) !=0 ) /*привязываемся*/ { cout << "!ERROR! code:" << errno << endl; /*EM*/ /*Обязательно закрываем socket*/ close(sockDes); exit(errno); }else { cout << "Bind success!" << endl; /*IM*/ } /*Перевод сокета в режим прослушивания клиентских подключений*/ cout << "Start listen...." << endl; if ( listen(sockDes,20) != 0) { cout << "!ERROR! code:" << errno << endl; /*EM*/ /*Обязательно закрываем socket*/ close(sockDes); perror("Listen()"); }else { cout << "Listen success!" << endl; /*IM*/ } /*Ожидание и принятие запросов на подключение с отображением каждого нового подключения на экране*/ pid_t pid = 1; int client; while(pid) { cout << "Waiting for connection " << numCon++ << "...." << endl; if( client = accept( sockDes,(struct sockaddr *) & clientAddr , sizeof(clientAddr)) < 0) /*ожидание подключения*/ perror("Accept"); else{ cout << "Connected!" << endl; /*подключились*/ /*fork() создаст второй процесс-child он то и будет дальше разбираться*/ if ( fork() ) close(client); /*закрываем ненужный сокет*/ else { close(sockDes); /*закрываем ненужный сокет*/ childFunc(&client); /*почти весь код процесса child для удобства в одной функции*/ exit(0); } } } return EXIT_SUCCESS; } |
|||
|
||||
| Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
Не совсем понял, что ты собрался делать в этом куске и зачем нужен процесс-child, но, по-видимому,
sockDes должен жить, пока ты используешь client
-------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
Ars
Спасибо за помощь, я уже разобрался с этим. Программа работает как часы. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |