開発環境 |
Microsoft Visual C++ 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
Win32 コンソール アプリケーション |
プロジェクト名 |
sock_c |
アプリケーションの種類 |
コンソール アプリケーション |
追加のオプション |
空のプロジェクト |
sock_c.c
// インポート ライブラリ
#pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
#include <WinSock2.h>
int main(int argc, char* argv[])
{
WSADATA wsaData;
HOSTENT* phe;
SOCKET sock;
SOCKADDR_IN name;
char acBuf[16];
char* pcHost;
int iPort;
int iRet;
if (argc != 3) {
fprintf(stderr, "usage: sock_c host port\n");
return 1;
}
pcHost = argv[1];
iPort = atoi(argv[2]);
// WinSockDLLの初期化
iRet = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iRet != 0) {
fprintf(stderr, "error: WSAStartup:%d\n", iRet);
return 1;
}
// IPアドレスの取得
phe = gethostbyname(pcHost);
if (phe == NULL) {
fprintf(stderr, "error: gethostbyname[%s]\n", pcHost);
return 1;
}
// TCPソケット記述子の作成
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET) {
fprintf(stderr, "error: socket\n");
return 1;
}
// サーバーに接続
name.sin_family = AF_INET;
name.sin_port = htons(iPort);
name.sin_addr = *((IN_ADDR*)phe->h_addr);
iRet = connect(sock, (SOCKADDR*)&name, sizeof name);
if (iRet != 0) {
fprintf(stderr, "error: connect\n");
return 1;
}
while (1) {
gets_s(acBuf, _countof(acBuf));
iRet = send(sock, acBuf, strlen(acBuf), 0);
if (strcmp(acBuf, "exit") == 0) {
break;
}
}
shutdown(sock, SD_BOTH);
closesocket(sock);
WSACleanup();
return 0;
}
出力
C:\>sock_c localhost 2222
hello
exit
最終更新:2012年09月01日 16:51