|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.08.2009, 17:25 | #1 |
Новичок
Джуниор
Регистрация: 08.08.2009
Сообщений: 3
|
Клиент-Сервер на WinSock
Ребята!!!! Помогите, плиз! Коннект происходит, всё функции без ошибок выполняются а buff всёравно пуста... Чего не хватает???
Код Клиента: WSAStartUp(MakeWord(1,0),WSD); sock:=socket(PF_INET,SOCK_STREAM,IP PROTO_IP); if sock=invalid_socket then memo1.Lines.Add('SoCket error') else memo1.Lines.Add('SoCket Done'); SA.sin_family:=PF_INET; SA.sin_addr.S_addr:=INADDR_ANY; SA.sin_addr:=in_addr(d_addr('172.16 .178.190')); SA.sin_port:=htons(1100); ret:=connect(sock,SA,sizeof(SA)); if ret=socket_error then memo1.Lines.Add('Connect error') else memo1.Lines.Add('Connect done'); buff:='5512'; ret:=send(sock,buff,4,0); if ret=socket_error then memo1.Lines.Add('Send error') else memo1.Lines.Add('Send Done'); closesocket(sock); WSACleanUp; Код Сервера: assignfile(log,'log.txt'); rewrite(log); WSAStartUp(makeword(1,0),WSD); sock:=socket(PF_INET,SOCK_STREAM,IP PROTO_IP); if sock=invalid_socket then writeln(log,'Socket Error') else writeln(log,'Socket Done'); SA.sin_family:=PF_INET; SA.sin_addr:=in_addr(d_addr('172.16 .178.190')); SA.sin_port:=htons(1100); ret:=bind(sock,Sa,sizeof(sa)); if ret=Socket_Error then writeln(log,'Bind Error') else writeln(log,'Bind Done'); ret:=listen(sock,1); if ret=Socket_Error then writeln(log,'Listen Error') else writeln(log,'Listen Done'); sk:=accept(sock,nil,nil); if sk=Invalid_Socket then writeln(log,'Accept Error') else writeln(log,'Accept Done'); ret:=recv(sk,buff,4,1); if ret=Socket_Error then writeln(log,'Recv Error') else writeln(log,'Recv Done'); label1.Caption:=buff; closesocket(sock); WSACleanUp; closefile(log); заранее, спасибо |
08.08.2009, 17:36 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Исходя из вашего кода, чтобы все заработало, у вас практически за очень короткое время одновременно должны вызываться accept у сервер и connect у клиента короче говоря, если исходить со стороны сервера, вы в обязаны в цикле пробовать accept, и если не ошибка то создавать отдельный поток (ну или ,если один клиент, продолжать работу), если ошибка то продолжать цикл. В таком случае клиент должен запускаться после того как сервер запущен.
ну это я так быстро глянув на код, не смотрел детали вообщем. Edit 1 Извените, не дочитал вопрос я подозреваю buff это String ? Тогда не так Код:
Код:
Код:
Для получения recv - аналогично, только сначала SetLength(buff, 4) сделайте Последний раз редактировалось BOBAH13; 08.08.2009 в 17:40. |
08.08.2009, 17:53 | #3 |
Новичок
Джуниор
Регистрация: 08.08.2009
Сообщений: 3
|
BOBAH13, Спасибо тебе большое)) Теперь поняла)
|
24.02.2010, 00:45 | #4 |
Регистрация: 10.08.2007
Сообщений: 9
|
Есть вопрос по поводу передачи сообщения, если мы изначально не знаем тип передаваемого сообщения, мы можем получить размер полученного буфера?
1) необходимо перевести сокет в неблокирующий режим ?№1 и новый вопрос, если я хочу обслуживать одним сервером 10000 клиентов подключенных одновременно это возможно, или нужно искать другие пути? ?№2 можно ли неблокирующий сокет перевести в поток? Последний раз редактировалось Siber_Dec; 24.02.2010 в 09:26. Причина: дополнение |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ftp клиент на winsock | sergoss | Работа с сетью в Delphi | 1 | 07.05.2009 19:07 |
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? | Demol | Работа с сетью в Delphi | 1 | 21.04.2009 16:18 |
Многопользовательский сервер на Winsock | SirToxa | Работа с сетью в Delphi | 7 | 27.03.2008 15:29 |
Клиент-сервер-клиент | Кронос | Работа с сетью в Delphi | 3 | 24.08.2007 07:57 |