Пишу чат, такой, чтобы Сервер при нажатии кнопки начал генерировать последовательность битов, и по отдному битику BitOutPdFC передавал клиенту.
Код:
static char RegMprdFC = 1;
char BitOutPdFC=(RegMprdFC&0x01)^((RegMprdFC&0x8)>>3);
RegMprdFC=(RegMprdFC>>1)|(BitOutPdFC<<3);
ServerSocket1->Socket->Connections[0]->SendBuf(&BitOutPdFC,sizeof(BitOutPdFC));
Тот, в свою очередь, принимал, записывал бит в переменную BitPd , прогонял через операции:
Код:
static char RegMprmFC = 1;
char BitPd= ReceiveBuf(&BitOutPdFC, sizeof(BitOutPdFC));
RegMprmFC=(RegMprmFC>>1)|((BitPd)<<3);
BitOutPmFC=(RegMprmFC&0x01)^((RegMprmFC&0x08)>>3);
А дальше выводил в окне уже получившийся BitOutPmFC
Но если я делаю именно таким образом, то возникает куча ошибок(((
Мб кто-нибудь подскажет как правильно передавать и принимать бит, и записывать его в переменную?
Добавлено через 33 секунды:Вот весь код программы:
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(!Button1->Tag)
{
ServerSocket1->Port=Edit1->Text.ToInt();
ServerSocket1->Active=true;
Button1->Caption="Выключить сервер";
}
else
{
ServerSocket1->Active=false;
Button1->Caption="Запустить сервер";
}
Button1->Tag=!Button1->Tag;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StaticText1->Caption="Соединение";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StaticText1->Caption="Нет соединения";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(!Button3->Tag)
{
if(!ServerSocket1->Active)
{
Application->MessageBox("Сервер не работает", "Error", MB_OK|MB_ICONERROR);
return;
}
if(!ServerSocket1->Socket->ActiveConnections)
{
Application->MessageBox("Клиент не подсоединён", "Error", MB_OK|MB_ICONERROR);
return;
}
Timer1->Enabled=true;
Button3->Caption="Завершить передачу";
}
else
{
Timer1->Enabled=false;
Button3->Caption="Передача информации";
}
Button3->Tag=!Button3->Tag;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(ServerSocket1->Active&&ServerSocket1->Socket->ActiveConnections)
{
static char RegMprdFC = 1;
char BitOutPdFC=(RegMprdFC&0x01)^((RegMprdFC&0x8)>>3);
RegMprdFC=(RegMprdFC>>1)|(BitOutPdFC<<3);
ServerSocket1->Socket->Connections[0]->SendBuf(&BitOutPdFC, sizeof(BitOutPdFC));
}
else
{
Timer1->Enabled=false;
Button3->Tag=0;
Button3->Caption="Подключиться к серверу";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Memo1->Lines->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClientSocket1->Address=Edit3->Text;
ClientSocket1->Port=Edit2->Text.ToInt();
ClientSocket1->Active=!ClientSocket1->Active;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
Button2->Caption="Отсоединиться";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Button2->Caption="Соединиться";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{ static char RegMprmFC = 1;
char BitPd= ReceiveBuf(&BitOutPdFC, sizeof(BitOutPdFC));
RegMprmFC=(RegMprmFC>>1)|((BitPd)<<3);
BitOutPmFC=(RegMprmFC&0x01)^((RegMprmFC&0x08)>>3);
Memo1->Lines->Add(Socket->ReceiveText);
}