TCPプログラムをSocketで作成する(C/C++)
12118 ワード
TCPプログラム(C/C+)-Linux WikiをSocketで作成
TCPプログラムをSocketで作成する(C/C++)
このページはLinux Wikiユーザー
Chenxing 2008年10月12日(日)07:42の最終変更.
Linux Wikiより
ヒント:この文書は4年(1620日)を超えて更新されていません.内容が古いことや間違っていることが発見された場合は、改善を歓迎します.
本稿では,LinuxのC言語Socket関数を用いてTCP接続を構築し,C++に対応することを紹介する.
TCP接続により、HTTP、FTPなどの一般的なプロトコルの情報伝送が可能となり、Linux ネットワークプログラミングの重要な部分となる.
目次
[ 非表示 ]
1参照が必要なヘッダファイル
2クライアントプログラム
3サーバ側プログラム
4通信方法
4.1送信情報
4.2受信情報
4.3接続を閉じる
参照が必要なヘッダファイル
ネットワークプログラミングを行うには、通常、次のヘッダファイルを参照する必要があります.
クライアントプログラム
これで、サーバ側との接続が確立され、通信方法は最後の部分を参照してください.
サーバエンドプログラム
このセグメントはC++コードです.
これにより、接続が確立され、返されるsockは新しいsocketであり、通信に使用することができる.
つうしんほうしき
メッセージの送信
ここでsdはsocket変数名(ファイル記述子)、dataはデータバッファのアドレス、lenはバッファのサイズであり、0は通常変更する必要はない
情報の受信
接続を閉じる
から取り出す
http://linux-wiki.cn/wiki/%E7%94%A8Socket%E7%BC%96%E5%86%99TCP%E7%A8%8B%E5%BA%8F%EF%BC%88C/C%2B%2B%EF%BC%89 ”
2つの分類 :
ネットワークプログラミング |
C/C++プログラミング
TCPプログラムをSocketで作成する(C/C++)
このページはLinux Wikiユーザー
Chenxing 2008年10月12日(日)07:42の最終変更.
Linux Wikiより
ヒント:この文書は4年(1620日)を超えて更新されていません.内容が古いことや間違っていることが発見された場合は、改善を歓迎します.
本稿では,LinuxのC言語Socket関数を用いてTCP接続を構築し,C++に対応することを紹介する.
TCP接続により、HTTP、FTPなどの一般的なプロトコルの情報伝送が可能となり、Linux ネットワークプログラミングの重要な部分となる.
目次
[ 非表示 ]
1参照が必要なヘッダファイル
2クライアントプログラム
3サーバ側プログラム
4通信方法
4.1送信情報
4.2受信情報
4.3接続を閉じる
参照が必要なヘッダファイル
ネットワークプログラミングを行うには、通常、次のヘッダファイルを参照する必要があります.
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
//
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
クライアントプログラム
struct sockaddr_in pin;
struct hostent *nlp_host;
int sd;
char host_name[256];
int port;
// 。 IP,
strcpy(host_name,"www.linux-wiki.cn");
port=80;
// , IP , ,
while ((nlp_host=gethostbyname(host_name))==0){
printf("Resolve Error!
");
}
// pin , 、 、 ,
bzero(&pin,sizeof(pin));
pin.sin_family=AF_INET; //AF_INET IPv4
pin.sin_addr.s_addr=htonl(INADDR_ANY);
pin.sin_addr.s_addr=((struct in_addr *)(nlp_host->h_addr))->s_addr;
pin.sin_port=htons(port);
// socket
sd=socket(AF_INET,SOCK_STREAM,0);
//
while (connect(sd,(struct sockaddr*)&pin,sizeof(pin))==-1){
printf("Connect Error!
");
}
これで、サーバ側との接続が確立され、通信方法は最後の部分を参照してください.
サーバエンドプログラム
このセグメントはC++コードです.
int serverSocket;
struct sockaddr_in serverAddr;
struct sockaddr_in clientAddr;
// port
int port=8000;
// Socket,
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
// socket , ,
int val=1;
setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
//
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(port);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
memset(&(serverAddr.sin_zero), 0, 8);
int rc = bind(serverSocket, (struct sockaddr*) &serverAddr,
sizeof(struct sockaddr));
if (rc == -1) {
printf("Bad bind
");
exit(1);
}
// serverSocket , 5
rc = listen(serverSocket, 5);
if (rc == -1) {
printf("Bad listen
");
exit(1);
}
//
int sock;
int clientAddrSize = sizeof(struct sockaddr_in);
sock = accept(serverSocket,
(struct sockaddr*) &clientAddr,
(socklen_t*) &clientAddrSize);
これにより、接続が確立され、返されるsockは新しいsocketであり、通信に使用することができる.
つうしんほうしき
メッセージの送信
send(int sd,char * data,int len,0);
ここでsdはsocket変数名(ファイル記述子)、dataはデータバッファのアドレス、lenはバッファのサイズであり、0は通常変更する必要はない
情報の受信
recv(int sd,char * buf,int maxlen,0);
接続を閉じる
close(int sd);
から取り出す
http://linux-wiki.cn/wiki/%E7%94%A8Socket%E7%BC%96%E5%86%99TCP%E7%A8%8B%E5%BA%8F%EF%BC%88C/C%2B%2B%EF%BC%89 ”
2つの分類 :
ネットワークプログラミング |
C/C++プログラミング