Вопросы по сокетам., Чтение/Запись в сокет.. |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы по сокетам., Чтение/Запись в сокет.. |
defnull |
18.5.2008, 19:19
Сообщение
#1
|
Студент Группа: Участник Сообщений: 49 Регистрация: 1.5.2008 Пользователь №: 165 Спасибо сказали: 0 раз(а) Репутация: 1 |
Добрый день.
Имеется сервер, при подключении к которому клиента создаётся поток, который обрабатывает некоторые данные полученные от клиента, при этом информируя клиента о ходе выполнения. Требуется сделать так чтобы клиент мог влиять на ход выполнения. Проблема для меня заключается в том что я не совсем понимаю можно ли одновременно и читать и писать в сокет. Если я запишу информацию в сокет (клиент), что я получу при попытке прочитать от-туда (тотже клиент)? данные которые мне возможно отправил сервер или то что я отправил?? Иными словами является ли сокет своеобразным общим буфером, или сокет это эдакий двунаправленный буфер? Естественно всё это можно было бы проверить на практике, но хотелось бы понять, прежде чем бежать набивать шишки. Заранее спасибо. |
|
|
Andrew Selivanov |
24.4.2009, 17:03
Сообщение
#2
|
Участник Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: 6 |
Если 2 копии программы и запускаются с разных компов, да и даже с одного компа, то в это классе будет всего 1 запись. Это существующее соединение. 1 копия клиента - 1 запуск - 1 соединение. Когда я втроой раз запущу программу, то пользователь введет логин и пароль и этот класс не будет знать,запущена ли еще какая-нибудь копия этой программы или нет Та же аналогия с аськой. Ты когда клиента запускаешь, то этот клиент не знает сколько его копий запущено и с какими логинами. Прочитал все посты, не понял, прочитал еще раз, опять не понял Ты напиши что ты хочешь сделать конкретно... Вообще если нужно, чтобы под одним логином и паролем двое не зашли, то в твоей базе логинов и паролей нужно завести поле АКТИВЕН и проверять его. |
|
|
Гость_Авварон_* |
26.4.2009, 8:48
Сообщение
#3
|
Гости |
Если 2 копии программы и запускаются с разных компов, да и даже с одного компа, то в это классе будет всего 1 запись. Это существующее соединение. 1 копия клиента - 1 запуск - 1 соединение. Когда я втроой раз запущу программу, то пользователь введет логин и пароль и этот класс не будет знать,запущена ли еще какая-нибудь копия этой программы или нет Та же аналогия с аськой. Ты когда клиента запускаешь, то этот клиент не знает сколько его копий запущено и с какими логинами. Прочитал все посты, не понял, прочитал еще раз, опять не понял Ты напиши что ты хочешь сделать конкретно... Вообще если нужно, чтобы под одним логином и паролем двое не зашли, то в твоей базе логинов и паролей нужно завести поле АКТИВЕН и проверять его. я к сожалению не работал с qtшными сокетами, но юзал sys/socket. Так вот при коннекте к серверу никакая авторизация не требуется - сервер сделает accept() в любом случае, если к нему делают connect() В слычае аськи, после соединеия передаются логин/пароль, сервер сверяет и высылает спец сообщение о том можно подключиться или нет. Возможно сервер принимает 1 подключение вообще? Тогда да, он зависнет до тех пор, пока управление не попадет к ф-ии accept() типа for(;;){ accept; read/write; close(); } Но так обычно никто не делает - либо 2 потока - для акссепта/передачи данных, либо 1 через ф-ию select(). Хотелось бы увидеть код сервера, отвечающий за соединение, туда нужно как раз вставить посылку служебного сообщения. |
|
|
Текстовая версия | Сейчас: 27.12.2024, 15:32 |