アットウィキロゴ

C言語 ソケットプログラム(簡易サーバクライアント)

サーバ側
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <vfw.h> // AVI~関数
#include <time.h> // clock()
#include <process.h>
 
#include <windows.h>
#include <stdio.h>
 
#pragma comment(lib, "wsock32.lib") // wsock32.libにリンクをはる
 
#define LHOST "192.168.24.51"
#define PORT 10000
 
int main()
{
	WSADATA wsaData;
	struct sockaddr_in jibun_ad, aite_ad;
	SOCKET jibun_sc, aite_sc;
	int aite_ad_size = sizeof(aite_ad);
	int a, ret;
	char buf[32];
 
	fprintf(stderr, "サーバープログラムスタート\n");
 
	//dll初期化
	WSAStartup(MAKEWORD(2,0), &wsaData);	
 
	//自分のアドレス情報をセット
	memset(&jibun_ad, 0, sizeof(struct sockaddr_in));
	jibun_ad.sin_addr.s_addr = htonl(INADDR_ANY);
	jibun_ad.sin_family = AF_INET;
	jibun_ad.sin_port = htons(PORT);
 
	//ソケットの生成(受話器の生成)
	jibun_sc = socket(AF_INET, SOCK_STREAM, 0);
 
	//バインド(電話番号登録)
	bind(jibun_sc, (struct sockaddr*)&jibun_ad, sizeof(jibun_ad));
 
	//同時接続数は1
	listen(jibun_sc, 1);
 
	//接続待ちに入る
	memset(&aite_ad, 0, sizeof(struct sockaddr_in));
	fprintf(stderr, "accept待ち中です・・・\n");
	aite_sc = accept(jibun_sc, (struct sockaddr*)&aite_ad, &aite_ad_size);
	if((int)aite_sc < 0){
		fprintf(stderr, "accept error\n");
		return 0;
	}
	fprintf(stderr, "accept success.%d\n ip: %s", aite_sc, inet_ntoa(aite_ad.sin_addr));
	fprintf(stderr, "please input loop num\n");
	fscanf(stdin, "%d", &a);
 
	//整数aを送信
	sprintf(buf, "%d", a);
	ret = send(aite_sc, buf, sizeof(buf), 0);
	if(ret < 1){
		fprintf(stderr, "send error\n");
		return 0;
	}
 
	//クライアントから文字列受信
	for(int i=0; i<a; i++){
		recv(aite_sc, buf, sizeof(buf), 0);
		fprintf(stderr, "%2d[%s]\n", i, buf);
		if(ret < 1){
			fprintf(stderr, "recv error\n");
			return 0;
		}
	}
 
	WSACleanup();
 
	return 0;
}
 



クライアント側
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <vfw.h> // AVI~関数
#include <time.h> // clock()
#include <process.h>
 
#pragma comment(lib, "wsock32.lib") // wsock32.libにリンクをはる
 
#define PORT 10000
#define LHOST "192.168.24.51"
 
int main(){
 
	WSADATA wsaData;
	SOCKET aite_sc;
	struct sockaddr_in aite_ad;
	char buf[32];
	int ret, a;
 
	fprintf(stderr, "クライアントプログラムスタート\n");
 
	//dll初期化
	WSAStartup(MAKEWORD(2,0), &wsaData);
 
	//相手(サーバ)のアドレス情報をセット
	memset(&aite_ad, 0, sizeof(struct sockaddr_in));
	aite_ad.sin_addr.s_addr = inet_addr(LHOST);
	aite_ad.sin_family = AF_INET;
	aite_ad.sin_port = htons(PORT);
 
	//接続先のソケット生成
	aite_sc = socket(AF_INET, SOCK_STREAM, 0);
 
	//接続(サーバのaccept待ちを解除)
	if(connect(aite_sc, (struct sockaddr *) &aite_ad, sizeof(aite_ad))){
		printf("%s に接続できませんでした\n",LHOST);
		return 0;
	}
	printf("%s に接続しました\n",LHOST);
 
	//受信
	ret = recv(aite_sc, buf, sizeof(buf), 0);
	if(ret < 1){
		fprintf(stderr, "recv error\n");
		return 0;
	}
	a = atoi(buf);
	fprintf(stderr, "%dを受信しました\n", a);
	for(int i=0; i<a; i++){
		sprintf(buf, "%d", i);
		ret = send(aite_sc, buf, sizeof(buf), 0);
		if(ret < 1){
			fprintf(stderr, "send error\n");
			return 0;
		}
	}
 
	//close
	closesocket(aite_sc);
	WSACleanup();
 
	return 0;
}
 

累計のアクセス数: -
今日のアクセス数: -
昨日のアクセス数 -

タグ:

C言語 ソケット
最終更新:2011年07月25日 20:13