TCP/IP��UDP/IP�̒ʐM�����邽�߂�C++���C�u�����ł��BWindows�iWinSock2���g�p�j�AUNIX�iPOSIX Socket���g�p�j�ɑΉ����Ă��܂��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;
}
bool startup_socket(); ����
void cleanup_socket(); ����
�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
�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; ��
�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�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;
IP�A�h���X�ƃ|�[�g�ԍ��̑g��\���\���́B
explicit socket_address(const ip_address& i= ip_address(), int p= 0); ��
ip_address ip;
int port;
�^��
|
�Ӗ�
|
Windows
|
UNIX
|
| Ver.1.5 | 2007/4/5 | diagram_socket��datagram_socket�ɉ����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 |
||
Gimite �s��