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接続を閉じる

参照が必要なヘッダファイル
ネットワークプログラミングを行うには、通常、次のヘッダファイルを参照する必要があります.
#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++プログラミング