ブログの説明
パソコンやアンドロイドなどの情報を収集しまとめているブログです。

記事内に張られている画像はクリックすると見やすいサイズの画像が表示されるようになっています。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
アクセスカウンター
検索フォーム
カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

TCP/IPサンプル

TCP/IP通信のサンプルです

サーバープログラム

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")


int main(int argc, char* argv[]){

	SOCKET s, s1;         //ソケット
	int result;          //戻り値
	//接続を許可するクライアント端末の情報
	struct sockaddr_in source;
	char buffer[1024];  //受信データのバッファ領域
	char ans[] = "送信成功";
	char ret;

	memset(&buffer, '\0', sizeof(buffer));
	//送信元の端末情報を登録する
	memset(&source, 0, sizeof(source));
	source.sin_family = AF_INET;
	//ポート番号はクライアントプログラムと共通
	source.sin_port = htons(7000);
	source.sin_addr.s_addr = htonl(INADDR_ANY);

	//ソケット通信の開始準備
	WSADATA data;
	result = WSAStartup(MAKEWORD(2, 0), &data);
	if (result < 0){
		printf("%d\n", GetLastError());
		printf("ソケット通信準備エラー\n");
	}

	//ソケットの生成
	s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (s < 0){
		printf("%d\n", GetLastError());
		printf("ソケット生成エラー\n");
	}


	//ソケットのバインド
	result = bind(s, (struct sockaddr *)&source, sizeof(source));
	if (result < 0){
		printf("%d\n", GetLastError());
		printf("バインドエラー\n");
	}

	//接続の許可
	result = listen(s, 1);
	if (result < 0){
		printf("接続許可エラー\n");
	}
	printf("接続開始\n");

	//クライアントから通信があるまで待機
	s1 = accept(s, NULL, NULL);
	if (s1 < 0){
		printf("待機エラー\n");
	}
	printf("待機終了\n");

	result = 0;
	while(1)
	{
		//クライアントから送信されたデータの受信
		result = recv(s1, buffer, sizeof(buffer), 0);
		//printf("result:%d\n",result);
		if (result < 0)
		{
			printf("受信エラー\n");
			//クライアントから通信があるまで待機
			printf("通信があるまで待機\n");
			s1 = accept(s, NULL, NULL);
			if (s1 < 0){
				printf("待機エラー\n");
			}
			printf("待機終了\n");
		}
		else printf("%s を受信しました\n", buffer);

		//クライアントへデータを送信する
		result = send(s1, ans, 10, 0);

		Sleep(10);
	}

	printf("接続終了\n");
	closesocket(s1);

	//ソケット通信の終了
	WSACleanup();

	printf("何かキーを押して下さい\n");
	scanf("%c", &ret);

	return 0;

}
クライアントプログラム
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")

int main(void){
	SOCKET s;    //ソケット
	//接続するサーバの情報
	struct sockaddr_in dest;
	//接続するサーバのIPアドレス
	//xxx.xxx.xxx.xxxの形式で指定する
	char destination[] = "127.0.0.1";

	char buffer[1024];
	int count = 0;

	//ソケット通信の準備
	WSADATA data;
	WSAStartup(MAKEWORD(2,0), &data);

	//接続先(サーバ)のアドレス情報を設定
	memset(&dest, 0, sizeof(dest));
	//ポート番号はサーバプログラムと共通
	dest.sin_port = htons(7000);
	dest.sin_family = AF_INET;
	dest.sin_addr.s_addr = inet_addr(destination);

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

	//サーバへの接続
	if(connect(s, (struct sockaddr *) &dest, sizeof(dest))){
		printf("%sに接続できませんでした\n", destination);
		return -1;
	}
	printf("%sに接続しました\n", destination);

	while(1)
	{
		//printf("サーバに送信する文字列を入力して下さい\n");
		//scanf("%s", buffer);

		sprintf(buffer,"%d",count);
		printf("%d\n",count);

		//サーバにデータを送信
		send(s, buffer, sizeof(buffer), 0);
		//printf("送信完了\n");

		//サーバからデータを受信
		recv(s, buffer, 1024, 0);
		printf("→ %s\n\n", buffer);

		count++;
		Sleep(1000);
	}

	// Windows でのソケットの終了
	closesocket(s);
	WSACleanup();

	return 0;

}

COMMENT

EDIT COMMENT

非公開コメント

最新トラックバック
ブロとも申請フォーム
QLOOKアクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。