0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|||||||||||
1 | |||||||||||
Путаница в работе socket29.04.2009, 07:29. Показов 4466. Ответов 5
Метки нет Все метки)
(
клиент и сервер. по отдельности c netcat'ом работают, a между собой вылезает ошибка в функции accept: accept: Bad file descriptor. подскажите где ошибка??
Server:
Причем сервер успевает напечатать первую передачу и затем bad file descriptor
0
|
|
29.04.2009, 07:29 | |
Ответы с готовыми решениями:
5
Путаница в работе Object.toString() Невозможно создать Socket: Socket sock = new Socket(someHostString,somePortInt); Постоянная утечка память при работе с System.Net.Sockets.Socket. В чем может быть дело? Код прилагаю Посоветуйте i5-7600 (Socket 1151) или i7-6800 (Socket 2011-3) |
![]() ![]() |
|
29.04.2009, 08:11 | 2 |
Сразу небольшой совет.
printf свои выдачи буфферизует, а потому в общем случае на экран они выдаюися не сразу. При этом если программа фатально навернулась, то эта выдача на экран уже впринципе не попадёт. Поэтому в таких случаях вместо printf ("aaa"); пиши fprintf (stderr, "aaa"); или в две операции printf ("aaa"); fflush (stdout); И на всякий случай в конце каждой печати лепи энтер (в dbrun у тебя печать без энтера, что сильно повышает вероятность того, что в фатальном случае печать ты не увидишь) Добавлено через 1 минуту 57 секунд > send(sd, str, sizeof(str), 0); Правильнее было бы вместо sizoef(str) писать strlen(str) - тебе же нужно только "полезную" часть строки послать, мусор, который есть в конце буффера слать не нужно
1
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
29.04.2009, 08:13 [ТС] | 3 |
да это просто уже экспериментальные версии. Тырканья что называется. Не могу отыскать где баг. ПРичем работало все вчера вечером. У меня ощущение что просто в Vim что-то нажал и либо удалилось что-то или добавилось, хотя не знаю. Уже нервы на пределе. Тысячу раз перепроверил. так все равно не пашет. Хотя с другой сторона как с Netcat'ом все нормально. Не понимаю....
0
|
![]() ![]() |
|
29.04.2009, 08:15 | 4 |
Приду на работу - попробую запустить, если время будет
А Netcat это что? Если вылетает accept, то скорее всего из-за того, что в первый раз он отрабатывает после listen, а второй раз отрабатывает в воздухе. Может надо listen вовнутрь цикла засунуть?
1
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
29.04.2009, 08:15 [ТС] | 5 |
ВСЕ. Спасибо большое. С strlen заработало. фууу. терь осталось разобраться в чем была проблемма)))
0
|
![]() ![]() |
|
29.04.2009, 10:27 | 6 |
По поводу strlen
В это случа после bytes_read = recv(sock, buf ,250 , 0); надо добавить buf[bytes_read] = 0; Т.е. ты в буффер сначала считал "чистые данные", за которыми надо принудительно нолик записать Или в момент отправки писать strlen(str) + 1 То, что с strlen'ом заработало - это как-то странно Глазами код посмотрел - вроде бы должно работать так, как ты делал Единственная теория, почему оно могло не работать - read'ом у тебя за раз считалось не всё сообщение, а только кусочек (по-честному read'ом надо в цикле вроде бы как читать). Хотя в случае передачи внутри машины это маловероятно Добавлено через 1 час 59 минут 33 секунды Запустил на работе. Сервер выдаёт ошибку "bind: Permission denied" Видимо у нас настроено так, что нельзя серверы-демоны запускать (типа безопасность и всё такое)
1
|
29.04.2009, 10:27 | |
Помогаю со студенческими работами здесь
6
Assembler linux. Socket recv and socket send invalid arguments Совместимость AMd athlon 2 x2 245 socket am3 к материнке ht2000 k8m890m-m socket am2 Nodejs net socket server and android socket client Windows socket server python + socket client js
Socket Android Client and Java Socket Server Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |