English / Japanese

gimite/socket


���T�v

TCP/IP��UDP/IP�̒ʐM�����邽�߂�C++���C�u�����ł��BWindows�iWinSock2���g�p�j�AUNIX�iPOSIX Socket���g�p�j�ɑΉ����Ă��܂��B


���_�E�����[�h

gimite/socket.h Ver.1.5


������

  1. Ver.1.1����server_socket��server_stream_socket�ɕς��A�d�l��������ƕς��܂����B
  2. Windows�̃w�b�_�ɂ���ẮA������Winsock.h��include���Ă��܂��A�R���p�C���G���[�̌����ɂȂ���̂��L��܂��B���Winsock2.h��include����Ή���ł���Ǝv���܂��B
  3. gcc 2.9x�ł́Astreambuf�̌`�����Â��̂Ŏg���܂���BSTLPort�g���΂����̂����H
  4. ���t�@�����X���ŁA�悭�g�������o�ɂ������t���Ă��܂��B


����

socket_stream���g���΁A�X�g���[���\�P�b�g��C++��iostream�Ƃ��Ĉ����܂��B

//��1�F �Ȉ�HTTP�N���C�A���g
#include <iostream>
#include <gimite/socket.h>

int main()
{
//�ŏ���1�񂾂��Ăяo���Ă��������B
gimite::startup_socket();
{
  //www.google.com�̃|�[�g80(HTTP)�ɐڑ��B
  gimite::socket_stream sst("www.google.com", 80);
  //�G���[�`�F�b�N�B
  if (!sst){
    std::cerr << "Failed to connect." << std::endl;
  }else{
    //������𑗐M�B
    sst << "GET / HTTP/1.0\r\n\r\n";
    std::string s;
    //1�s���Ž�M���ĕ\���B
    while (std::getline(sst, s))
      std::cout << s << std::endl;
    }
  }
  //�Ō��1�񂾂��Ăяo���Ă��������B
  gimite::cleanup_socket();
  return 0;
}

server_stream_socket�̓T�[�o���X�g���[���\�P�b�g�����b�v���Ă��܂��B

//��2�F �G�R�[�T�[�o
#include <iostream>
#include <gimite/socket.h>

int main()
{
  //�ŏ���1�񂾂��Ăяo���Ă��������B
  gimite::startup_socket();
  {
    //�|�[�g12345�ŃN���C�A���g�̐ڑ����󂯕t���n�߂܂��B
    gimite::server_stream_socket server(12345);
    //�G���[�`�F�b�N�B
    if (!server){
      std::cerr << "Failed to bind socket." << std::endl;
    }else{
      while (true){
        //�N���C�A���g����̐ڑ��v����҂��A�ŏ��ɗ����l�Ƃ�
        //�ʐM�̂��߂̃\�P�b�g�n���h����Ԃ��܂��B
        gimite::socket_t s= server.accept();
        //�N���C�A���g�ƒʐM���邽�߂�socket_stream���쐬�B
        gimite::socket_stream sst(s);
        //�����ł́A��M������������I�E���Ԃ����Ă��܂��B
        char c;
        while (sst.get(c))
          sst << c;
      }
    }
  }
  //�Ō��1�񂾂��Ăяo���Ă��������B
  gimite::cleanup_socket();
  return 0;
}

datagram_socket�̓f�[�^�O�����\�P�b�g�����b�v���Ă��܂��B

//��3�F UDP�ʐM�i�T�[�o���j
#include <iostream>
#include <gimite/socket.h>

int main()
{
  //�ŏ���1�񂾂��Ăяo���Ă��������B
  gimite::startup_socket();
  {
    gimite::socket_address saddr;
    //�|�[�g12345�Ƀ\�P�b�g���쐬�B
    gimite::datagram_socket dsock(12345);
    char cs[5];
    while (true){
      //5�o�C�g�̃p�P�b�g����M�B���M�҂̃A�h���X��saddr�ɓ���܂��B
      dsock.recvfrom(cs, 5, &saddr);
      //�󂯎�����������\���B
      std::cout << "Message from client: " << cs << std::endl;
      //�Ԏ��̃p�P�b�g"pong\0"�𑗐M�B
      dsock.sendto("pong", 5, &saddr);
    }
  }
  //�Ō��1�񂾂��Ăяo���Ă��������B
  gimite::cleanup_socket();
  return 0;
}

//��4�F UDP�ʐM�i�N���C�A���g���j
#include <iostream>
#include <gimite/socket.h>

int main()
{
  //�ŏ���1�񂾂��Ăяo���Ă��������B
  gimite::startup_socket();
  {
    //���M��A�h���X��locahost�̃|�[�g12345�B
    gimite::socket_address saddr("localhost", 12345);
    //�|�[�g�ԍ��͂��܂����Ń\�P�b�g���쐬�B
    gimite::datagram_socket dsock(0);
    //�p�P�b�g"ping\0"�𑗐M�B
    dsock.sendto("ping", 5, &saddr);
    char cs[5];
    //5�o�C�g�̃p�P�b�g����M�B
    dsock.recvfrom(cs, 5);
    //�󂯎�����������\���B
    std::cout << "Message from server: " << cs << std::endl;
  }
  //�Ō��1�񂾂��Ăяo���Ă��������B
  gimite::cleanup_socket();
  return 0;
}


���O���[�o���֐�

bool startup_socket(); ����

void cleanup_socket(); ����


��socket_stream

�X�g���[���\�P�b�g�iTCP�j�̃��b�p�Bstd::iostream���p�����Ă���̂ŁAstd::iostream�̓��o�͋@�\���g���đ���M�ł���B

socket_stream(); ��

socket_stream(const ip_address& host, int port); ����

explicit socket_stream(socket_t sock);

virtual ~socket_stream();

void open(const ip_address& host, int port); ��

void close();

socket_t release();

int send(const void* buffer, int size);

int recv(void* buffer, int size);

socket_t socket()const;

operator void*()const; ��
bool operator!()const; ��

*1�����A��������socket_stream�̓X���b�h���S�����l���ĂȂ��̂ŁA���̕��@�̈��S�����������ł��i���j�B


��server_stream_socket

�T�[�o���X�g���[���\�P�b�g�iTCP�j�̃��b�p�B

server_stream_socket(); ��

explicit server_stream_socket(int port, int backlog= 5); ����

server_stream_socket(socket_t sock, bool is_bound);

~server_stream_socket();

bool bind(int port, int backlog= 5); ��

socket_t accept(); ����

void close();

socket_t release();

void socket(socket_t sock, bool is_bound);

socket_t socket()const;

operator const void*()const; ��
bool operator!()const; ��


��datagram_socket

�f�[�^�O�����\�P�b�g�iUDP�j�̃��b�p�B

datagram_socket(); ��

explicit datagram_socket(int port); ����

datagram_socket(socket_t sock, bool is_bound);

~datagram_socket();

bool bind(int port); ��

int recvfrom(void* buffer, int size, socket_address* addr= 0, int flags= 0); ����

int sendto(const void* buffer, int size, const socket_address* addr, int flags= 0); ����

void close();

socket_t release();

void socket(socket_t sock, bool is_bound);

socket_t socket()const;

operator const void*()const; ��
bool operator!()const; ��


��ip_address

IP�A�h���X��\���N���X�Bip_address�̑���ɁAstd::string��char*��n���Ă�OK�i��Fsocket_stream�̃R���X�g���N�^�̈����j�B

explicit ip_address(sock_uint32_t addr= INADDR_NONE);

ip_address(const std::string& host); ��
ip_address(const char* host); ��
ip_address& operator=(const std::string& host);
ip_address& operator=(const char* host);

in_addr addr()const;

sock_uint32_t as_int()const;


��socket_address

IP�A�h���X�ƃ|�[�g�ԍ��̑g��\���\���́B

explicit socket_address(const ip_address& i= ip_address(), int p= 0); ��

ip_address ip;

int port;


��Typedef

�^��
�Ӗ�
Windows
UNIX
socket_t ����Socket�֐��Q���\�P�b�g����ʂ��邽�߂Ɏg���n���h���B SOCKET int
sock_uint32_t IP�A�h���X��\��32�r�b�g�������������B unsigned long u_int32_t


���X�V����

Ver.1.5 2007/4/5 diagram_socket��datagram_socket�ɉ����B
Ver.1.4 2004/11/3 ip_address�Asocket_address�ɑ΂��āu�召�Ɠ��l�̔�r�v�Ɓuostream�ւ̏o�́v���ł���悤�ɁB
Ver.1.3 2004/9/21 '\xff'����M�����EOF�Ƃ݂Ȃ��Ă��܂��ꍇ���L�����̂��C���B
Ver.1.2 2004/2/15 socket_stream::send()��socket_stream::recv()��lj��B
Ver.1.1 2003/11/28 server_socket��server_stream_socket�ɉ������Ă�����Ǝd�l�ύX�B
diagram_socket��lj��B
�z�X�g���𒼐ڎw�肷������ip_address�N���X���g���悤�Ɂi�����񂩂�ip_address�ւ̈Öق̌^�ϊ�����`����Ă���̂ŁA���܂ł̏��������ʂ�j�B
socket_stream���������i�����‚���j�B
Ver.1.0 2003/10/12 ���J�B


���A����

BCB6 Pro�AVC.NET Std�AVC.NET 2003 Pro�Agcc 3.3�icygwin�j�Agcc 3.3�iFreeBSD�j�œ���m�F���܂����B���̊‹��ł̓���m�F��A�u�����𒼂����瓮�����v�Ȃǂ̕񍐂��f�����ɂǂ����B���ƃo�O�񍐂��B

Gimite �s��