Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от кли  (Прочитано 8626 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
warlocklex
Гость
« : 16-01-2007 11:39 » 

UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента

такая вот проблема. а с win-server'ом всё работает.

кусок сервера который обрабатывает прием и посылку

     …
(fd = accept(sockfd, (struct sockaddr *) &sa, &n))
   …
   void *operate(void *_fd) {
    int* fd2=(int*)_fd;
    int fd=(int)fd2;
    char c;
    bool finished;
    string cmd, answer, stmp="", Login, Passwd, answer2="";
    char* tmp;
    int IDtmp=0,itmp=0,UserNum=0,i;
    syslog(LOG_NOTICE,"SocketConnected=%d",fd);
    finished = false;

    answer = "the simple tcp daemon is ready";
    write(fd, answer.c_str(), answer.size());//- это клиент получает

    while(!finished) {
   cmd = answer = "";

   /* Read a line from the client side*/

   while(!finished) {
       finished = read(fd, &c, 1) != 1;

       if(c == '\n') break; else
       if(c != '\r') cmd += c;
   }

/*   If there is a command and no socket error appeared in the previous cycle, try to perform some processing.*/

   if(!finished && !cmd.empty()) {
   syslog(LOG_NOTICE,"cmd=%s from Socket: %d",cmd.c_str(),fd);
       if(cmd == "hello") {
      answer = "my daemonic greatings";
       } else if(cmd == "version") {
      answer = "Verision 0.0001 = Alpha. Mega-Message-Server";
       } else if(cmd == "quit") {
      shutdown(fd, 2);
      close(fd);
      finished = true;
       }


этот клиент на С++Builder ClientSocket принимал приветствие от сервера


void __fastcall TChat::B_SendClick(TObject *Sender)
{
AnsiString str =say->Text;

ClientSocket1->Socket->SendText(str);
   
}
//---------------------------------------------------------------------------

void __fastcall TChat::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
Pole->Lines->Add(Socket->ReceiveText());
}
//---------------------------------------------------------------------------


другой клиент написан на элементарных(другое название WinApi-socket) сокетах.Таже история.


void __fastcall TForm_client::Button_connctClick(TObject *Sender)
{
   // создание элементарного сокета
    sockfd =socket(AF_INET, SOCK_STREAM, 0);
     if(!sockfd)
    { ShowMessage("error_socket create");
      return;}

    memset(&sa, 0, sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = inet_addr(Edit_ipadr->Text.c_str());
    sa.sin_port = htons(55555);

 if (0!=connect(sockfd, (struct sockaddr *) &sa, sizeof(sa)))
 { // ShowMessage(GetLastError()); ShowMessage("connect_error");
    StatusBar1->SimpleText="Connect_error";
    return;     }
}
//---------------------------------------------------------------------------
void __fastcall TForm_client::Button_sendClick(TObject *Sender)
{
// послать
sendbuf=Edit_send->Text.c_str();
send(sockfd,sendbuf,strlen(sendbuf),0);
//принять
int bytesRecv = 0;
 while( bytesRecv == 0 ) {
        bytesRecv = recv( sockfd, recvbuf, sizeof(recvbuf), 0 );
        if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
            StatusBar1->SimpleText="Connection Closed";
            return;
        }
        if (bytesRecv < 0)
            return;
        StatusBar1->SimpleText=("Bytes Recv: "+bytesRecv);
        Memo1->Lines->Add(recvbuf);
    }

}
//---------------------------------------------------------------------------


в телнете(win и unix) связь с сервером есть.
помогите! направьте мысль в нужное русло.
« Последнее редактирование: 14-12-2007 15:00 от Алексей1153++ » Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #1 : 16-01-2007 11:59 » 

Цитата
while(!finished) {
...
   while(!finished) {
       finished = read(fd, &c, 1) != 1;
...}
...
if(!finished && !cmd.empty())

это как понять?
« Последнее редактирование: 16-01-2007 12:01 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
warlocklex
Гость
« Ответ #2 : 16-01-2007 16:10 » new

Цитата
while(!finished) {
...
   while(!finished) {
       finished = read(fd, &c, 1) != 1;
...}
...
if(!finished && !cmd.empty())

это как понять?

а без этого есть оБшибки(тот кусок удалю нах..)
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #3 : 16-01-2007 17:46 » 

то есть даже до syslog не доходит? нужно одну фишку проверить попробуй использовать порт не 55555, а 0x1111
Записан

Удачного всем кодинга! -=x[PooH]x=-
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines