XY ステージを動かす

JOYPADでコマンド入力でXYステージを動かすってプログラムを作ってみた
PC2台をつなげてソケットで通信をおこなった.

クライアント
#include
#include
#include

int main()
{
WSADATA wsaData;
struct sockaddr_in server;
SOCKET sock;
char buf[32];
int n=0;
char cn;

cn = 'F';
// winsock2の初期化
WSAStartup(MAKEWORD(2,0), &wsaData);

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

// 接続先指定用構造体の準備
server.sin_family = AF_INET;
server.sin_port = htons(8000);
server.sin_addr.S_un.S_addr = inet_addr("169.254.38.68");//inet_addr("192.168.1.62");

// サーバに接続
connect(sock, (struct sockaddr *)&server, sizeof(server));



while(cn != 'Q'){
// サーバからデータを受信
memset(buf, 0, sizeof(buf));
n = recv(sock, buf, sizeof(buf), 0);

//////////////////////////////////////////
//cn = 'H';
//printf("%d\n",cn);
//printf("%s\n",buf);
//getchar();
//////////////////////////////////////////

switch (*buf){
case 'H':
printf("%s : ステージ1、2の原点を検出\n",buf);
break;

case 'M':
printf("%s : ステージ1を1000パルス+方向に移動\n",buf);
break;

case 'A':
printf("%s : ステージ1を5000パルス−方向に移動\n",buf);
break;

case 'I':
printf("%s : ステージ2を1000パルス+方向に移動\n",buf);
break;

case 'D':
printf("%s : ステージ2を5000パルス−方向に移動\n",buf);
break;

case 'Q':
printf("%s : プログラムの終了\n",buf);
cn = 'Q';
break;

default:
printf("あれれ、おかしいなーこのー\n");
cn = getchar();
}

}

printf("終了します\n");
getchar();
// winsock2の終了処理
WSACleanup();

return 0;
}
サーバー

#include
#include
#include

int main()
{
// 何回もクライアントと接続できるサーバ例(エラー処理付)
WSADATA wsaData;
SOCKET sock0;
struct sockaddr_in addr;
struct sockaddr_in client;
int len;
SOCKET sock;
int n;
BOOL yes = 1;
char c;

c = '0';

// winsock2の初期化
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0) {
return 1;
}

// ソケットの作成
sock0 = socket(AF_INET, SOCK_STREAM, 0);
// IPv4インターネット・プロトコル、Soketの型指定(TCPだとSOCK_STREAM、UDPだとSOCK_DGRAM)、使用するプロトコル(0固定)
if (sock0 == INVALID_SOCKET) {
printf("socket : %d\n", WSAGetLastError());
return 1;
}

// ソケットの設定
addr.sin_family = AF_INET;
addr.sin_port = htons(8000);
addr.sin_addr.S_un.S_addr = INADDR_ANY;

// bindエラー回避
setsockopt(sock0,SOL_SOCKET, SO_REUSEADDR, (const char *)&yes, sizeof(yes));

if (bind(sock0, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
printf("bind : %d\n", WSAGetLastError());
return 1;
}

// TCPクライアントからの接続要求を待てる状態にする
if (listen(sock0, 5) != 0) {
printf("listen : %d\n", WSAGetLastError());
return 1;
}

while (c != 'e') {
// TCPクライアントからの接続要求を受け付ける
len = sizeof(client);
sock = accept(sock0, (struct sockaddr *)&client, &len);
if (sock == INVALID_SOCKET) {
printf("accept : %d\n", WSAGetLastError());
break;
}

// acceptした相手の確認
printf("accepted connection from %s, port=%d\n",
inet_ntoa(client.sin_addr), ntohs(client.sin_port));

// 5文字送信
n = send(sock, "H", 1, 0);
if (n < 1) {
printf("send : %d\n", WSAGetLastError());
break;
}
// TCPセッションの終了
closesocket(sock);
printf("終了する場合は e を入力\n");
c = getchar();
}
// winsock2の終了処理
WSACleanup();

return 0;
}