forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Принцип работы сокетов в BMX (http://forum.boolean.name/showthread.php?t=14419)

aradriel 15.03.2011 12:20

Принцип работы сокетов в BMX
 
Есть потребность создать прогу для обмена пакетами с игровым сервером...

Но я сам в сетевых технологиях не особо разбираюсь, хотя программил еще в начале 90-х на спектруме :-D

в общем, кто знает, подскажите или туториал, или сами пример кода киньте с пояснениями, как работают эти сокеты в БМаксе

то есть вот есть сервер, с айпи servip
к нему оригинальный клиент подключается через порт servport
мне нужно для начала отправить пакет подключения к серверу
содержание пакета мне известно, пусть он будет pack1$
далее мне нужно принять пакет от сервера, записать его в пусть pack2$
отправить служебный пакет pack3$
принять служебный пакет pack4$
и так далее


Будьте любезны, кто разбирается в теме, накидайте строки программы для осуществления этого действа, а то я что-то запутался малость =)

Да, все доступные туториалы я уже видел, так что будет лучше, если сами пример приведете, спасибо заранее =)

Для меня собственно не ясно с открытием и закрытием потоков и сокетов. То есть, вот я создал сокет, создал поток сокета, подключил сокет, скопировал в поток сокета нужный мне поток, далее что? Нужно закрыть поток сокета, чтобы сервер принял его? То есть мне сам принцип не очень тут ясен. Что и когда нужно закрывать. Может быть сам сокет нужно закрыть после передачи первого пакета? Потому что первый пакет то я отправляю серверу и он его адекватно принимает. Но вот дальнейшее взаимоедйсвтие с ним уже не происходит - он перестает принимать пакеты и я не могу от него их получить. Это видимо из-за того, что я где-то неверно сработал с потоком сокета или самим сокетом.

Черный крыс 15.03.2011 14:18

Ответ: Принцип работы сокетов в BMX
 
так создай новый сокет и отправляй очередной пакет данных. наскок я знаю, после отправки пакета, сокет автоматом закрывается.

ща на сорсы поглядим...

так там в TSocket есть поле _autoClose и оно по умолчанию равно истине, при сооздании сокета, вырубай это поле.

aradriel 15.03.2011 15:21

Ответ: Принцип работы сокетов в BMX
 
спасибо, полезная инфа, сейчас посмотрю что и как...

aradriel 15.03.2011 15:42

Ответ: Принцип работы сокетов в BMX
 
эээм... че то не то и не так у меня все получается, не мог бы ты, Diablo1909, набросать сюда строчки кода, как это должно выглядеть. А то мне кажется, у меня возможно просто даже в синтаксисе может быть ошибка.

mysocket:TSocket = CreateTCPSocket()
mysocketstream=CreateSocketStream(mysocket)
ConnectSocket(mysocket,servip,servport)
WriteString (mysocketstream,pack1$)
CloseStream mysocketstream
CloseSocket mysocket


а в строке "writestring..." выдает ошибку "unhandled exception: error writing to string"

то есть получается даже первый пакет не отправился, это у меня в b3d первый пакет уходил, но там все проще... тут даже он не идет, не знаю почему
пишет что не может произвести запись в поток, причем ConnectSocket(mysocket,servipip,servport) выдает значение 0 на выходе, значит даже не происходит подключение... вот я и прошу привести пример, потмоу что у меня тут кажется принципиальная ошибка присутствует в самой структуре

все переменные корректно заданы

В общем не могу я запустить даже пару сервер-клиент, для передачи одного пакета, не то что подключится к удаленному серверу через эти сокеты. Взятые примеры, при установке strict выдают кучу ошибок, да и в общем-то не работают как положено, хоть заявлены как примеры.

Не знаю что тут делать. Я говорю, если кто-то знает ситуацию - просто киньте, пожалуйста, строки кода для клиента и сервера... рабочие строки.

aradriel 16.03.2011 10:50

Ответ: Принцип работы сокетов в BMX
 
Хорошо, теперь у меня вот такой код

mysocket:TSocket = CreateTCPSocket()
mysocketstream:TStream=CreateSocketStream(mysocket )
ConnectSocket(mysocket,servip,servport)
WriteString (mysocketstream:TStream,pack1$)


ошибки не возникают, подключение сокета к серверу происходит, но теперь не идет запись в поток сокета нужной мне стринговой перменной

я здесь не пойму саму суть, то есть нужно ли указывать в строке WriteString (mysocketstream:TStream,pack1$) метод TStream, или можно записать WriteString (mysocketstream,pack1$)
ошибок не дает ни тот ни этот вариант, но и записи в поток не происходит

что делать?


Часовой пояс GMT +4, время: 08:51.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot