開発環境 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