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;
}