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) связь с сервером есть. помогите! направьте мысль в нужное русло.
|