Показать сообщение отдельно
  #12  
Старый 24.11.2010, 21:15
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 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.
Ответить с цитированием