ショッピングモール  


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.2996

Microsoft Visual 6.0 cで通信プログラムを作りたい!!
投稿者---一生懸命(2004/11/19 16:54:29)


はじめまして。
c言語
ただいまc言語のシリアル通信の勉強をしております。
安易な問題で笑われてしまいますが、自分は本当に
シリアル通信でハイパーターミナルのCOM5にデータを送り、それを受信するというプログラムを作っています・・。
それで送信の簡単なプログラムは一応できました。↓
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void DispLastError(char* szErrName);


void main(void)
{
HANDLE hPort;
DWORD dwSendSize; // 送信データサイズ
DCB dcb; // DCB構造体
COMMTIMEOUTS Timeout; // COMMTIMEOUTS構造体
BOOL Ret; // 関数戻り値

char a[50];
int count;
COMSTAT Comstat;
DWORD dwErrorFlags;
// ポート初期化
hPort = CreateFile("\\\\.\\COM5", GENERIC_READ | GENERIC_WRITE, 0, NULL,



OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if(hPort == INVALID_HANDLE_VALUE){
printf("Port could not open.\n");
exit(0);
}

// 送受信バッファ初期化
Ret = SetupComm(hPort, 4096, 4096);
if(Ret == FALSE){
printf("SetupComm failed.\n");
CloseHandle(hPort);
exit(0);
}
Ret = PurgeComm(hPort, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
if(Ret == FALSE){
printf("PurgeComm failed.\n");
CloseHandle(hPort);
exit(0);
}

// タイムアウト設定
Timeout.ReadIntervalTimeout = 0xFFFFFFFF;
Timeout.ReadTotalTimeoutMultiplier = 0;
Timeout.ReadTotalTimeoutConstant = 1000;
Timeout.WriteTotalTimeoutMultiplier = 0;
Timeout.WriteTotalTimeoutConstant = 1000;
Ret = SetCommTimeouts(hPort, &Timeout);
if(Ret == FALSE){
printf("SetCommTimeouts failed.\n");
CloseHandle(hPort);
exit(0);
}
ClearCommError (hPort,&dwErrorFlags,&Comstat);

// 通信設定
Ret = GetCommState(hPort, &dcb);



if(Ret == FALSE){
printf("GetCommState failed.\n");
CloseHandle(hPort);
exit(0);
}
dcb.BaudRate = 9600; /*関数は端末の出力速度を返します*/
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
Ret = SetCommState(hPort, &dcb);
if(Ret == FALSE){
printf("SetCommState failed.\n");


CloseHandle(hPort);
exit(0);
}






// 送信データ生成
do{

printf("数字を入力してください");
gets(a);

if(strlen(a) == 0 ) break;


// データ送信
Ret = EscapeCommFunction(hPort, SETRTS);
if(Ret == FALSE){



printf("EscapeCommFunction failed.\n");

if(GetLastError() != 87){


CloseHandle(hPort);

exit(0);
}
}
count = 0;
Ret = WriteFile(hPort, a, strlen(a), &dwSendSize, NULL);
if(Ret == FALSE){
printf("WriteFile failed.\n");
CloseHandle(hPort);
exit(0);
}
}while(1);

// 終了処理
CloseHandle(hPort);
}
/************************************************/
/* GetLastErrorエラーメッセージ表示
/* Created by K.Satou(02.10.02)
/*
/************************************************/
void DispLastError(char* szErrName)
{

LPVOID lpMsgBuf;
DWORD dwErrorCode;
char szMsg[256];

dwErrorCode = GetLastError();

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 既定の言語
(LPTSTR) &lpMsgBuf,
0,
NULL
);

// lpMsgBuf 内のすべての挿入シーケンスを処理する。

// ...

// 文字列を表示する。
sprintf(szMsg, "%sが発生しました。\n\nエラーコード = %d\nエラー文字列 = %s", szErrName, dwErrorCode, (LPCTSTR)lpMsgBuf);
// クライアントへメッセージ送信

//#ifdef _DEBUG
MessageBox(NULL, szMsg, szErrName, MB_OK | MB_ICONINFORMATION);
//#endif

// バッファを解放する。

LocalFree(lpMsgBuf);
}
長くなってしまってすみません・・。
それで受信のプログラムのつくり方がわかりません。
受信のプログラムの作り方をご教授していただけないでしょうか。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:Microsoft Visual 6.0 cで通信プログラムを作りたい!! 2997 あかま 2004/11/19 17:35:00


No.2997

Re:Microsoft Visual 6.0 cで通信プログラムを作りたい!!
投稿者---あかま(2004/11/19 17:35:00)


>長くなってしまってすみません・・。
「HTML変換ツール」でインデントしてください。
でないと、この長さだととてもじゃないけど読めません。

>それで受信のプログラムのつくり方がわかりません。
>受信のプログラムの作り方をご教授していただけないでしょうか。
送信が書けて受信が書けないってのも変な話ですね。
というか
/* Created by K.Satou(02.10.02)
って(笑)

まずは仕様を調べてはみましたか?
それが分からずには書けないし、理解できないでしょう。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity