离职前写一个Windows上的小程序,socket client,在BCB平台通过调用Windows API实现简单的客户端。
/*
** Filename: --mainForm.cpp
** Function: --创建Socket,连接,并发送数据,调用Windows API实现Socket
** Author: --ericteck
** Date: --2011.9.21
*/
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "mainForm.h"
#include "setServer.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
/******************************************************
** 主窗体类的构造函数
******************************************************/
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
this->Memo1->SetTextBuf("");
}
/******************************************************
** 连接实现函数
******************************************************/
void __fastcall TForm1::Button_ConnectClick(TObject *Sender)
{
/*
** 初始化Scoket
*/
InitSocket();
/*
** 释放指针
*/
free(pCIp);
free(pCPort);
pCIp = NULL;
pCPort = NULL;
}
/******************************************************
** 初始化Socket
******************************************************/
void __fastcall TForm1::InitSocket()
{
/*
** 初始化 Windows Socket
*/
if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
{
this->Memo1->SetTextBuf("Init Windows Socket Failed");
}
/*
** 创建 Windows Socket
*/
CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( CientSocket == INVALID_SOCKET )
{
this->Memo1->SetTextBuf("Create Socket Failed");
}
/*
** Initialize server:协议,IP地址,端口
*/
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.s_addr = inet_addr(pCIp);
ServerAddr.sin_port = htons(StrToInt(pCPort));
memset(ServerAddr.sin_zero, 0x00, 8);//让sockaddr_in匹配sockaddr
/*
** 建立socket连接
*/
Ret = connect(CientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));
if ( Ret == SOCKET_ERROR )
{
this->Memo1->SetTextBuf("Connect Error");
}
else
{
this->Memo1->SetTextBuf("连接成功!在此输入字符发送!");
}
}
/******************************************************
** 断开socket连接
******************************************************/
void __fastcall TForm1::Button_DisconnectClick(TObject *Sender)
{
closesocket(CientSocket);
WSACleanup();
}
/******************************************************
** 关闭Socket
******************************************************/
void __fastcall TForm1::Button_CancelClick(TObject *Sender)
{
closesocket(CientSocket);
WSACleanup();
this->Close();
}
/******************************************************
** 发送数据
******************************************************/
void __fastcall TForm1::Button_SendClick(TObject *Sender)
{
/*
** 获取输入的数据
*/
this->Memo1->GetTextBuf(this->SendBuffer,sizeof(SendBuffer));
/*
** 发送数据到缓存
*/
if ( send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0) == SOCKET_ERROR )
{
this->Memo1->SetTextBuf("Send Info Error");
}
}
/******************************************************
** 设置Server的IP与Port
******************************************************/
void __fastcall TForm1::Button_SetClick(TObject *Sender)
{
TForm2 *Form2;
Form2=new TForm2(Application);//动态创建Form2
Form2->Show();
}