|
|
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента такая вот проблема. а с win-server'ом всё работает. кусок сервера который обрабатывает прием и посылку 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) связь с сервером есть. помогите! направте мысль в нужное русло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 13:59 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
авторint* fd2=(int*)_fd; int fd=(int)fd2;цэ шо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 14:12 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
maXmo авторint* fd2=(int*)_fd; int fd=(int)fd2;цэ шо? идентификатор сокета. тот кусок что раннее описал это функция void *operate(void *_fd) { ...... а береться сокет от сель void mainloop() { int sockfd, fd; struct sockaddr_in sa; socklen_t n; sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if(sockfd != -1) { memset(&sa, 0, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_addr.s_addr = htonl(INADDR_ANY); sa.sin_port = htons(55555); if(bind(sockfd, (struct sockaddr *) &sa, sizeof(sa)) != -1) { while(1) { if(!listen(sockfd, SOMAXCONN)) { n = sizeof(sa); if((fd = accept(sockfd, (struct sockaddr *) &sa, &n)) != -1) { syslog(LOG_NOTICE, "connection from %s", inet_ntoa(sa.sin_addr)); { pthread_t thread; pthread_create(&thread, NULL, operate, (void*)fd);//тут и передает pthread_detach(thread); } } } } } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 14:25 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
warlocklex Код: plaintext 1. 2. 3. 4. Так попробуй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 14:47 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
Сорри. Ошибся. Но дескриптор сокета я бы передавал по ссылке. А коннект то происходит? В следующий раз исходники в тек SRC помистишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 14:49 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
соединение происходить.Сервер посылает приветсвие, клиенты получают.Дальше труба: не тебе приём ,не передача. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 16:13 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
С той половиной цикла, что ты привел, вроде все нормально. Единственное замечение - я никогда не додумывался работать с сокетами read/write. Почему не используется recv/send? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 16:23 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
AkhС той половиной цикла, что ты привел, вроде все нормально. Единственное замечение - я никогда не додумывался работать с сокетами read/write. Почему не используется recv/send? это read/write от этого recv/send отличает наличие доп.параметра флага. ХЗ что лучше.тут так. там у сервера такой отсыл выбраной команды\реакции. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 19:06 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
warlocklex while(!finished) { finished = read(fd, &c, 1) != 1; if(c == '\n') break; else if(c != '\r') cmd += c; } Ета, советую почитать о read в УНИХе - как работает. И вообще - пользоватся select. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 21:35 |
|
||
|
UNIX-сервер,Win-клиент.клиент не отсылает серверу или сервер не принимает от клиента
|
|||
|---|---|---|---|
|
#18+
warlocklex это read/write от этого recv/send отличает наличие доп.параметра флага. ХЗ что лучше.тут так. recv хуже быть не может, по определению :). Ну, раз обмен какой-то есть, значит, скорее всего, ошибка алгоритмическая. Советую снять логи в run-time на каждых проходах цикла. Возможно где-то "затык". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 10:03 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34260629&tid=2029658]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 491ms |

| 0 / 0 |
