ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

ASM Winsock 1.1
  #1  
Старый 14.11.2009, 12:42
Аватар для Sams
Sams
Участник форума
Регистрация: 18.04.2009
Сообщений: 120
Провел на форуме:
435863

Репутация: 80
По умолчанию ASM Winsock 1.1

Всем привет. Изучаю winsock под АСМ, но возникла небольшая проблема. Что только не пробовал, не получается. Решил обратиться к специалистам, то есть к вам
В общем написал самый простейший клиент и сервер без использования окон. Тип соединения - TCP. Коннект клиента к серверу вроде как происходит, ошибку не выдает, но вот не получается отослать данные командой send. Компилятор - MASM32. Очень рассчитываю на вашу помощь.

Server

Цитата:
.386
.model Flat, StdCall
option casemap:none
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\wsock32.lib
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\wsock32.inc
include \masm32\include\windows.inc
.data
wsadata WSADATA <>
mCaption db "Error! Suxx!", 0
mText1 db "Error WSAStartUp", 0
mText2 db "Error2", 0
hSock DWORD ?
hSock2 dd ?
sin sockaddr_in <>
sPort DWORD 6001
sIP db "127.0.0.1", 0
buffer db 1024 dup (0)
mCaption2 db "Woohoo", 0
mText3 db "Connected!", 0

.code
Main:

invoke WSAStartup, 101h, ADDR wsadata
.if eax!=NULL
invoke MessageBoxA, 0, ADDR mText1, ADDR mCaption, 0
.endif

invoke socket, AF_INET, SOCK_STREAM, 0
.if eax==INVALID_SOCKET
invoke WSAGetLastError
.endif
mov hSock, eax

invoke htons, sPort
mov sin.sin_port, ax
invoke inet_addr, ADDR sIP
mov sin.sin_addr, eax
mov sin.sin_family, AF_INET

invoke bind, hSock, ADDR sin, sizeof sin
invoke listen, hSock, SOMAXCONN
invoke accept, hSock, NULL, NULL
mov hSock2, eax

datarecv:
invoke recv, hSock2, ADDR buffer, 1024, 0
.if byte ptr buffer=="Q"
invoke MessageBoxA, 0, ADDR mText3, ADDR mCaption2, 0
jmp Quit
.endif

jmp datarecv

Quit:
invoke WSACleanup
invoke ExitProcess, 0
end Main
Client

Цитата:
.386
.model flat, stdcall
option casemap:none
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\wsock32.lib
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\wsock32.inc
include \masm32\include\windows.inc
.data
wsadata WSADATA <>
mCaption db "Error! Suxx!", 0
mText1 db "Error WSAStartUp", 0
mText2 db "Error Connect", 0
mText3 db "Error Send", 0
hSock DWORD ?
hSock2 dd ?
sin sockaddr_in <>
sPort DWORD 6001
sIP db "127.0.0.1", 0
buffer db "Q", 0

.code
Main:

invoke WSAStartup, 101h, ADDR wsadata
.if eax!=NULL
invoke MessageBoxA, 0, ADDR mText1, ADDR mCaption, 0
jmp Quit
.endif

invoke socket, AF_INET, SOCK_STREAM, 0
.if eax==INVALID_SOCKET
invoke WSAGetLastError
jmp Quit
.endif
mov hSock, eax

invoke htons, sPort
mov sin.sin_port, ax
invoke inet_addr, ADDR sIP
mov sin.sin_addr, eax
mov sin.sin_family, AF_INET

invoke connect, hSock, ADDR sin, sizeof sin
.if eax==SOCKET_ERROR
invoke MessageBoxA, 0, ADDR mText2, ADDR mCaption, 0
jmp Quit
.endif
mov hSock2, eax

invoke send, hSock2, ADDR buffer, sizeof buffer, 0
.if eax==SOCKET_ERROR
invoke MessageBoxA, 0, ADDR mText3, ADDR mCaption, 0
jmp Quit
.endif

Quit:
invoke closesocket, hSock
invoke WSACleanup
invoke ExitProcess, 0
end Main

Последний раз редактировалось Sams; 14.11.2009 в 14:24..
 
Ответить с цитированием

  #2  
Старый 14.11.2009, 15:14
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Поищи на форуме моего спам бота(micro bot) которого я писал на FASM. Там можеш посмотреть полностью клиентскую часть для работы с winsock. Я делал всё на winsock2 но там также почти.
 
Ответить с цитированием

  #3  
Старый 14.11.2009, 16:42
Аватар для Sams
Sams
Участник форума
Регистрация: 18.04.2009
Сообщений: 120
Провел на форуме:
435863

Репутация: 80
По умолчанию

Проблема решена. Ошибка была в том, что отсылал данные не туда. Не доглядел функцию connect, и какое значение она возвращает. Как говориться: "Пальцем в небо"
Вот собственно ошибка:

Цитата:
invoke connect, hSock, ADDR sin, sizeof sin
.if eax==SOCKET_ERROR
invoke MessageBoxA, 0, ADDR mText2, ADDR mCaption, 0
jmp Quit
.endif
mov hSock2, eax

invoke send, hSock2, ADDR buffer, sizeof buffer, 0
.if eax==SOCKET_ERROR
invoke MessageBoxA, 0, ADDR mText3, ADDR mCaption, 0
jmp Quit
.endif
Я отсылал данные на хендл hSock2, который был получен в следствии выполнения функции connect.

Цитата:
mov hSock2, eax
Хотя данная функция возвращает совсем другое значение (видать я перепутал с функцией accept() )

Правильно будет так:

Цитата:
invoke connect, hSock, ADDR sin, sizeof sin
.if eax==SOCKET_ERROR
invoke MessageBoxA, 0, ADDR mText2, ADDR mCaption, 0
jmp Quit
.endif

invoke send, hSock, ADDR buffer, sizeof buffer, 0
.if eax==SOCKET_ERROR
invoke MessageBoxA, 0, ADDR mText3, ADDR mCaption, 0
jmp Quit
.endif
Тему можно закрывать.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
УЧИМСЯ ИСПОЛЬЗОВАТЬ WINSOCK. ЧАСТЬ I. slesh Авторские статьи 30 06.03.2010 20:52
Клиент-сервер на WinSock --StraNger-- Авторские статьи 1 21.04.2009 11:43
уязвимости MyFWB 1.1 Iceangel_ Сценарии/CMF/СMS 0 16.04.2009 12:53
Чуть не понятно о winsock на делфи diznt С/С++, C#, Delphi, .NET, Asm 8 03.04.2009 21:12
Что за зверь? Smf 1.1 Rc3 IIAHbI4 Форумы 12 11.01.2007 23:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ