【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);