windows 平台socket客户端

离职前写一个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();
}


源代码:bcb_win_socketclient

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值