socket class による server と client
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[Copy constructorと代入演算子]]
* socket class を使って server と client program を書き換...
さて、mysockaddr class と mysocket class を使って、前の
server program と client program を書き換えてみよう。
まず server の方。
#include "mysocket.h"
#define BACKLOG 3
#define SERVICE_PORT 8888
int main()
{
struct sockaddr_in ca;
socklen_t calen;
mysockaddr sa( 0, SERVICE_PORT );
mysocket s(PF_INET, SOCK_STREAM);
if(s.bind(sa.address(),sa.length()) == -1)
return 1;
if(s.listen(BACKLOG) == -1)
return 1;
while(1)
{
calen = sizeof(ca);
mysocket t = s.accept((struct sockaddr*)&ca, &calen);
t.send("Hello\r\n", 7, 0);
}
return 0;
}
mysocket のうち t を while loop 中に入れることで close を...
close しなくても while loop の終端で scope からはずれて
destructor が呼ばれる。
さて、clinet の方。
#include <cstdio>
#include <cstdlib>
#include "mysocket.h"
#define MYBUFSIZE 128
int main(int argc, char* argv[])
{
static char buf[MYBUFSIZE + 1];
if(argc != 3)
{
fprintf(stderr,"Usage: %s host port\n", argv[0]);
return (-1);
}
int port = ::atoi(argv[2]);
mysockaddr sa( argv[1], port );
mysocket s(PF_INET, SOCK_STREAM);
if(s.connect(sa.address(), sa.length()) == -1)
{
fprintf(stderr, "Cannot connect to %s:%d\n", argv[1]...
return 1;
}
int n;
while((n = s.recv(buf, MYBUFSIZE)) > 0)
{
buf[n] = 0;
printf( "%s", buf );
}
return 0;
}
こちらも main の scope から抜ける時に s の desctructor が
呼ばれるということで、close を省略している。
だいぶ C++ らしくなってきた。
終了行:
[[Copy constructorと代入演算子]]
* socket class を使って server と client program を書き換...
さて、mysockaddr class と mysocket class を使って、前の
server program と client program を書き換えてみよう。
まず server の方。
#include "mysocket.h"
#define BACKLOG 3
#define SERVICE_PORT 8888
int main()
{
struct sockaddr_in ca;
socklen_t calen;
mysockaddr sa( 0, SERVICE_PORT );
mysocket s(PF_INET, SOCK_STREAM);
if(s.bind(sa.address(),sa.length()) == -1)
return 1;
if(s.listen(BACKLOG) == -1)
return 1;
while(1)
{
calen = sizeof(ca);
mysocket t = s.accept((struct sockaddr*)&ca, &calen);
t.send("Hello\r\n", 7, 0);
}
return 0;
}
mysocket のうち t を while loop 中に入れることで close を...
close しなくても while loop の終端で scope からはずれて
destructor が呼ばれる。
さて、clinet の方。
#include <cstdio>
#include <cstdlib>
#include "mysocket.h"
#define MYBUFSIZE 128
int main(int argc, char* argv[])
{
static char buf[MYBUFSIZE + 1];
if(argc != 3)
{
fprintf(stderr,"Usage: %s host port\n", argv[0]);
return (-1);
}
int port = ::atoi(argv[2]);
mysockaddr sa( argv[1], port );
mysocket s(PF_INET, SOCK_STREAM);
if(s.connect(sa.address(), sa.length()) == -1)
{
fprintf(stderr, "Cannot connect to %s:%d\n", argv[1]...
return 1;
}
int n;
while((n = s.recv(buf, MYBUFSIZE)) > 0)
{
buf[n] = 0;
printf( "%s", buf );
}
return 0;
}
こちらも main の scope から抜ける時に s の desctructor が
呼ばれるということで、close を省略している。
だいぶ C++ らしくなってきた。
ページ名: