
24.11.2010, 21:15
|
 |
Профессионал
|
|
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
|
|
сначала где-нить делаем так:
Код:
uses WinSock;
...
var sClient,SServer:TSocket;
addr:sockaddr_in;
s:AnsiString;
isize:integer;
...
// Инициализация всякой фигни
if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then ;
Клиент
Код:
// Создаём сокет
sClient := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if sClient = INVALID_SOCKET then
begin
mmLog.Lines.Add('Ошибка создания сокета');
exit;
end;
// Заполняем структуру ADDR
s := EdtIP.text; // тут IP в виде 192.168.56.13
addr.sin_addr.S_addr := INET_ADDR(PAnsiChar(s));
addr.sin_family := AF_INET;
addr.sin_port := htons(7777); // Порт - любое число от 0 до 65535, не занятое никем. лучше брать больше 1000
// Пробуем подключиться
if connect(sClient, addr, sizeof(addr)) = SOCKET_ERROR then
begin
mmLog.Lines.Add('Ошибка подключения');
exit;
end;
//подключились, работаем
Сервер:
Код:
sServer := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if sServer = INVALID_SOCKET then
begin
mmLog.Lines.Add('Ошибка создания сокета');
exit;
end;
addr.sin_addr.S_addr := htonl(INADDR_ANY);
addr.sin_family := AF_INET;
addr.sin_port := htons(7777); // тот же порт, что и у клиента
if bind(sServer, addr, sizeof(addr)) = SOCKET_ERROR then
begin
mmLog.Lines.Add('Ошибка бинд');
exit;
end;
if listen(sServer, 4) = SOCKET_ERROR then
begin
mmLog.Lines.Add('Ошибка прослушки');
exit;
end;
mmLog.Lines.Add('Server Started');
isize := sizeof(addr);
sClient := accept(sServer, @addr, @isize);
if sClient = INVALID_SOCKET then
begin
mmLog.Lines.Add('Ошибка подключения');
exit;
end;
mmLog.Lines.Add('Подключён ' + inet_ntoa(addr.sin_addr));
// клиент подключился. Если надо постоянно клиентов подключать - в
// цикл все это, начиная с accept(), а клиентов в массив пихать. Для
// каждого лучше запускать отдельный поток.
closesocket(sServer);
Примерно так.
дальше - Send и Recv. Больше ниче не надобно.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
|