Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Работа с сокетами в php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужна ваша помощь
alex4715
Отправлено: 30 Августа, 2010 - 16:21:14
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




День добрый.

У меня возникла потребность написать чат для игрового клиента и сервера с использованием сокетов. Я даже не представляю с чего начать и где взять конкретную инфу по этой теме. Если кто что нибудь знает или имеет ссылочки на статьи, учебники прошу поделиться ;)

У меня есть на руках сами протоколы:
Client -> Server

CODE (text):
скопировать код в буфер обмена
  1.  
  2. Login
  3. ID: 0xFF
  4. DWORD: account id
  5. STRING: cookie
  6. DWORD: 0x05
  7.  
  8. Leave Room/Channel
  9. ID: 0x22
  10. STRING: roomname
  11.  
  12. Join Room/Channel
  13. ID: 0x1E
  14. STRING: roomname
  15.  
  16. Pong
  17. ID: 0x02
  18.  
  19. Channel Message
  20. ID: 0x03
  21. STRING: message
  22. DWORD: channel id
  23.  
  24. Whisper
  25. ID: 0x08
  26. STRING: recipient
  27. STRING: message
  28.  
  29. Private Message
  30. ID: 0x1C
  31. STRING: recipient
  32. STRING: message
  33.  
  34. Channel List
  35. ID: 0x1F
  36.  
  37. Whois
  38. ID: 0x2A
  39. STRING: username
  40.  
  41. Clan Message
  42. ID: 0x13
  43. STRING: message
  44.  
  45. Clan Invite
  46. ID: 0x47
  47. STRING: user
  48.  

Server -> Client
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. Response Login
  5. ID: 0x00
  6. You must respond to this packet with 0x012A
  7. [edit]
  8. Ping
  9. ID: 0x01
  10. You must respond to this packet with pong
  11.  
  12. Chat Message
  13. ID: 0x03
  14. DWORD: account id
  15. DWORD: channel id
  16. STRING: message
  17.  
  18. Response Join Room/Channel
  19. ID: 0x04
  20. STRING: channel
  21. DWORD: channel id
  22. BYTE: unknown (channel flags? 0x18)
  23. STRING: topic
  24. DWORD: op count
  25. DWORD: account id
  26. BYTE: type
  27. DWORD: user count
  28. STRING: name
  29. DWORD: account id
  30. BYTE: state
  31. BYTE: flags
  32.  
  33. Notification Message
  34. ID: 0x12
  35. BYTE: ID(?) of the notification
  36. STRING: The message displayed.
  37.  
  38. Player Joined Chat
  39. ID: 0x05
  40. STRING: name
  41. DWORD: account id
  42. DWORD: channel id
  43. BYTE: state
  44. BYTE: flags
  45.  
  46. Player Left Chat
  47. ID: 0x06
  48. DWORD: account id
  49. DWORD: channel id
  50.  
  51. Whisper
  52. ID: 0x08
  53. STRING: user
  54. STRING: message
  55.  
  56. Buddy List
  57. ID: 0x0B
  58. DWORD: count
  59. DWORD: account id
  60. BYTE: state
  61. BYTE: flags
  62. STRING: server (if in lobby/in game)
  63. STRING: game name (if in game)
  64.  
  65. User Status Update
  66. ID: 0x0C
  67. DWORD: account id
  68. BYTE: state
  69. BYTE: flags
  70. DWORD: clan id
  71. STRING: clan
  72. STRING: server (if in lobby/in game)
  73. STRING: game name (if in game)
  74. DWORD: match id
  75.  
  76. Clan Message
  77. ID: 0x13
  78. DWORD: buddy id
  79. STRING: message
  80.  
  81. Private Message
  82. ID: 0x1C
  83. STRING: user
  84. STRING: message
  85.  
  86. Channel List
  87. ID: 0x1F
  88. DWORD: count
  89. DWORD: channel id
  90. STRING: name
  91. DWORD: user count
  92.  
  93. Whois (Not Found)
  94. ID: 0x2B
  95. STRING: Username
  96.  
  97. Whois (Offline)
  98. ID: 0x2C
  99. STRING: Username
  100. STRING: Last Seen
  101.  
  102. Whois (In Channels)
  103. ID: 0x2D
  104. STRING: Username
  105. DWORD: count
  106. STRING: channel
  107.  
  108. Whois (In Game)
  109. ID: 0x2E
  110. STRING: game name
  111. STRING: game time
  112.  
  113. Online Count
  114. ID: 0x68
  115. DWORD: Number of online players
  116. [edit]
  117. Flags
  118.  
  119. User States
  120. Offline: 0x00
  121. Online: 0x03
  122. In Lobby: 0x04
  123. In Game: 0x05
  124.  
  125. User Flags
  126. None: 0x00
  127. Moderator: 0x01
  128. Founder: 0x02
  129. Prepurchased:0x40
  130.  


А что с протаколами этими делать я не представляю даже ;)
 
 Top
JustUserR
Отправлено: 31 Августа, 2010 - 15:57:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




alex4715 пишет:
А что с протаколами этими делать я не представляю даже ;)
Для сетевого взаимодействия сервера и клиента могут использоваться как текстовые так и двоичные форматы протоколов - тем не менее общая схема работы является похожей и сосотоит в последовательной обработке и упаковке/распаковки информационных пакетов В вашем случае протокол предсталяет собой набор сообшений в определннном виде - который включает в себя идентификатор события и связанные с ним данные При вставке собственной информации в передаваемый пакет важно прозвести его предварительное экранирование/кодирование или упаковку под фиксированный размер - это необходимо для сохранения внутренней структуры и явного отличия служебных и информационных полей
Приведенный вами сетевой протокол подразумевает использование некоторых типов данных языков C/C++ - вы можете посмотреть описание здесь http://www[dot]realcoding[dot]net/articl[dot][dot][dot]mirovanie-tcp/ip При переведении кода на язык PHP в котором нет строгой типизаци данных и ограничения размеров для целочисленных элементов - необходимо использовать побитовые операции и функции pack/unpack для выбора нужной части значения


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
alex4715
Отправлено: 01 Сентября, 2010 - 20:50:35
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Спасибо вам огромное, сейчас сижу читаю ;)

Можно вас попросить написать строчку RecvFrom, что бы мне было понятней как это отправляется. Допустим мы будем отправлять вот такие данные:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Login
  3. ID: 0xFF
  4. DWORD: account id
  5. STRING: cookie
  6. DWORD: 0x05
  7.  


Спасибо.
 
 Top
JustUserR
Отправлено: 02 Сентября, 2010 - 17:36:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




alex4715 пишет:
Спасибо вам огромное, сейчас сижу читаю ;)
Можно вас попросить написать строчку RecvFrom, что бы мне было понятней как это отправляется. Допустим мы будем отправлять вот такие данные:
Пожалуйста! Для отправки сетевого пакета с требуемой информацией ля используемого вами серсива необходимо сделать следующее - сначала открывается само соединение с применением простого интерфейса с помощью fsockopen - или использования расширенных возможности с функциями пакета socket После инициализации соединения необходимо передать специальый пакет - так как он является обычной строкой то производиться предварительная его упаковка - для приведенного вам примера это будет $send_str=pack("sl",0xFF,accound_id)."cookie".chr(0).pack("l",0x05) - при этом заместо приведенных идентификаторных и строковых констант необходимо установить реальые значения Кроме того конечный вид pack-выражения может отличаться в зависимости от особенносей удаленного сервиса - в случае неработоспособности вы можете попробовать изменить порядок байт для чисел и формат передаваемой строки


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB