|
15.03.2011, 12:20
|
#1
|
AnyKey`щик
Регистрация: 15.03.2011
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Принцип работы сокетов в BMX
Есть потребность создать прогу для обмена пакетами с игровым сервером...
Но я сам в сетевых технологиях не особо разбираюсь, хотя программил еще в начале 90-х на спектруме
в общем, кто знает, подскажите или туториал, или сами пример кода киньте с пояснениями, как работают эти сокеты в БМаксе
то есть вот есть сервер, с айпи servip
к нему оригинальный клиент подключается через порт servport
мне нужно для начала отправить пакет подключения к серверу
содержание пакета мне известно, пусть он будет pack1$
далее мне нужно принять пакет от сервера, записать его в пусть pack2$
отправить служебный пакет pack3$
принять служебный пакет pack4$
и так далее
Будьте любезны, кто разбирается в теме, накидайте строки программы для осуществления этого действа, а то я что-то запутался малость =)
Да, все доступные туториалы я уже видел, так что будет лучше, если сами пример приведете, спасибо заранее =)
Для меня собственно не ясно с открытием и закрытием потоков и сокетов. То есть, вот я создал сокет, создал поток сокета, подключил сокет, скопировал в поток сокета нужный мне поток, далее что? Нужно закрыть поток сокета, чтобы сервер принял его? То есть мне сам принцип не очень тут ясен. Что и когда нужно закрывать. Может быть сам сокет нужно закрыть после передачи первого пакета? Потому что первый пакет то я отправляю серверу и он его адекватно принимает. Но вот дальнейшее взаимоедйсвтие с ним уже не происходит - он перестает принимать пакеты и я не могу от него их получить. Это видимо из-за того, что я где-то неверно сработал с потоком сокета или самим сокетом.
|
(Offline)
|
|
15.03.2011, 14:18
|
#2
|
|
Ответ: Принцип работы сокетов в BMX
так создай новый сокет и отправляй очередной пакет данных. наскок я знаю, после отправки пакета, сокет автоматом закрывается.
ща на сорсы поглядим...
так там в TSocket есть поле _autoClose и оно по умолчанию равно истине, при сооздании сокета, вырубай это поле.
|
|
|
Сообщение было полезно следующим пользователям:
|
|
15.03.2011, 15:21
|
#3
|
AnyKey`щик
Регистрация: 15.03.2011
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Принцип работы сокетов в BMX
спасибо, полезная инфа, сейчас посмотрю что и как...
|
(Offline)
|
|
15.03.2011, 15:42
|
#4
|
AnyKey`щик
Регистрация: 15.03.2011
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Принцип работы сокетов в 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 в 09:49.
|
(Offline)
|
|
16.03.2011, 10:50
|
#5
|
AnyKey`щик
Регистрация: 15.03.2011
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Принцип работы сокетов в BMX
Хорошо, теперь у меня вот такой код
mysocket:TSocket = CreateTCPSocket()
mysocketstream:TStream=CreateSocketStream(mysocket )
ConnectSocket(mysocket,servip,servport)
WriteString (mysocketstream:TStream,pack1$)
ошибки не возникают, подключение сокета к серверу происходит, но теперь не идет запись в поток сокета нужной мне стринговой перменной
я здесь не пойму саму суть, то есть нужно ли указывать в строке WriteString (mysocketstream:TStream,pack1$) метод TStream, или можно записать WriteString (mysocketstream,pack1$)
ошибок не дает ни тот ни этот вариант, но и записи в поток не происходит
что делать?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:20.
|