ITメモ
C言語 / Programming Language C




【C言語】[socket]コード - Client

【C言語】
[socket]コード - Client





コンパイルコード


gcc ソースファイル -o 出力ファイル -lws2_32 //gccコンパイラ
cl ソースファイル -o 出力ファイル -lws2-32 //Visual C++




ソースコード - サーバー通信のクライアントサイドのコード

//コンパイルコード
//gcc socket02.c -o socket02.o -lws2_32


#include <stdio.h>
#include <winsock2.h>

int
main()
{
WSADATA wsaData;
struct sockaddr_in server;
SOCKET sock;
char buf[32];

// winsock2の初期化
WSAStartup(MAKEWORD(2,0), &wsaData);

// ソケットの作成
sock = socket(AF_INET, SOCK_STREAM, 0);

// 接続先指定用構造体の準備
server.sin_family = AF_INET;
server.sin_port = htons(12345);
server.sin_addr.S_un.S_addr = inet_addr("192.168.11.6");

// サーバに接続
connect(sock, (struct sockaddr *)&server, sizeof(server));

// サーバからデータを受信
memset(buf, 0, sizeof(buf));
int n = recv(sock, buf, sizeof(buf), 0);

printf("%d, %s\n", n, buf);

// winsock2の終了処理
WSACleanup();

return 0;
}



ソースコード - ソケット通信のサンプルコード(ポート25へのメール送信)

const char *ServerName="サーバー名";
char CommandLineText[1024]="";
struct sockaddr_in server;
struct hostent *host;

int sock;
char buf[1024];
int n;
char GetErrorCode[3];

//--------------------------------------------------


host=gethostbyname(ServerName);
if( host != NULL ){
server.sin_addr = *(struct in_addr *)(host->h_addr_list[0]);
}
unsigned int bite_addr=inet_addr(inet_ntoa(*(struct in_addr *)(host->h_addr_list[0])));


//ソケットの作成
sock = socket(AF_INET, SOCK_STREAM, 0);

//接続先指定用構造体の準備
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr.s_addr=bite_addr;

//サーバに接続
connect(sock, (struct sockaddr *)&server, sizeof(server));

//サーバからデータを受信
memset(buf, 0, sizeof(buf));
n = read(sock, buf, sizeof(buf));
NSString *Result_Connect=[NSString stringWithFormat:@"Connect Server : n=%d,s=%s", n, buf];
NSLog(@"Result_Connect = %@",Result_Connect);



//サーバーへのデータ送信
strcat(CommandLineText,"HELO ");
strcat(CommandLineText,ServerName);
strcat(CommandLineText,"\n");
memset(buf,0,sizeof(buf));
snprintf(buf,sizeof(buf),"%s",CommandLineText);
n=write(sock,buf,(int)strlen(buf));
NSLog(@"Write n = %d Buf = %s",n,buf);

//サーバからデータを受信
memset(buf, 0, sizeof(buf));
n = read(sock, buf, sizeof(buf));
NSLog(@"Read n = %d Buf = %s",n,buf);


//サーバーとのデータ通信を繰り返す。
//SMTPコマンドを順に送信すると、メールが送信できる。


//socketの終了
close(sock);

//--------------------------------------------------
return;



ソースコード - ソケット通信のサンプルコード(HTTPサーバーとの通信)

const char *ServerName="サーバー名";

struct sockaddr_in server;
struct hostent *host;

int sock;
char buf[1024];

//--------------------------------------------------

host=gethostbyname(ServerName);
if( host != NULL ){
server.sin_addr = *(struct in_addr *)(host->h_addr_list[0]);
}
unsigned int bite_addr=inet_addr(inet_ntoa(*(struct in_addr *)(host->h_addr_list[0])));


//ソケットの作成
sock = socket(AF_INET, SOCK_STREAM, 0);

//接続先指定用構造体の準備
server.sin_family = AF_INET;
server.sin_port = htons(80);
server.sin_addr.s_addr=bite_addr;

//サーバに接続
connect(sock, (struct sockaddr *)&server, sizeof(server));

FILE *fp=fdopen(sock, "r+");

//バッファリング OFF
setvbuf(fp, NULL, _IONBF, 0);

//サーバーへの送信
fprintf(fp, "POST /フォルダ名/ファイル名.html HTTP/1.0\n");
fprintf(fp, "Host: サーバー名\n");
fprintf(fp, "Content-Type:application/x-www-form-urlencoded\n");
fprintf(fp, "Content-Length:%lu\n",strlen(PostText));
fprintf(fp, "\n");
fprintf(fp, "%s",PostText);
fprintf(fp, "\n");
fprintf(fp, "\n");

//サーバーからの受信
while(1){
if ( fgets(buf,sizeof(buf),fp) == NULL ){
break;
}
printf("%s", buf);

}

//socketの終了
close(sock);