C++ builder 网络聊天程序

C++ Builder中用socket api来写网络通讯程序 立即下载
#include <vcl.h>
#pragma hdrstop

#include "main.h"
//---------------------------------------------------------------------------
#pragma link "ScktComp"
#pragma resource "*.dfm"
TChatForm *ChatForm;
class TMyServerThread:public TServerClientThread
{
public:
        TMyServerThread(bool suspend,TServerClientWinSocket *socket):TServerClientThread(suspend,socket){}
    virtual void   __fastcall   TMyServerThread::ClientExecute(void) {
        //   make   sure   connection   is   active
        while   (!Terminated   &&   ClientSocket-> Connected) {
            try {
                //   Now,   use   TWinSocketStream   to   read   or   write   information
                //   over   a   blocking   socket   connection

                TWinSocketStream   *pStream   =   new   TWinSocketStream(ClientSocket,   60000);

                try {
                                        char   buffer[100];
                    memset(   buffer,   0,   sizeof(buffer)   );

                    //   give   the   client   60   seconds   to   start   writing
                    if   (pStream-> WaitForData(2000)) {
                        if   (pStream-> Read(buffer,   sizeof(buffer))   ==   0)
                        {
                            ClientSocket-> Close();
                                                }
                        else
                                                {
                            ChatForm-> Memo1-> Lines-> Add(AnsiString(buffer));
                        }

                    } else
                                                 ChatForm-> Memo1-> Lines-> Add(AnsiString( "等待数据超时"));
                }
                                catch(Exception &ex) /// Exception &ex
                                {
                                        Application->MessageBoxA(ex.Message.c_str(),"Error",0);
                                        delete   pStream;
                                }
                                delete pStream;
            } catch   (Exception &ex) {
                Application->MessageBoxA(ex.Message.c_str(),"Error",0);
            }
        }
    }
};
//---------------------------------------------------------------------------
__fastcall TChatForm::TChatForm(TComponent* Owner)
        : TForm(Owner)
{
        thread=0;
}
//---------------------------------------------------------------------------

void __fastcall TChatForm::FileListenItemClick(TObject *Sender)
{
  FileListenItem->Checked = !FileListenItem->Checked;
  if (FileListenItem->Checked)
  {
     ClientSocket->Active = false;
     ServerSocket->Active = true;
     StatusBar1->Panels->Items[0]->Text = "Listening...";
  }else
  {
     if (ServerSocket->Active)
     {
        ServerSocket->Active = false;
     }
     StatusBar1->Panels->Items[0]->Text = "";
  }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::FileConnectItemClick(TObject *Sender)
{
  if (ClientSocket->Active)
  {
    ClientSocket->Active = false;
  }
  Server=InputBox("Computer to connect to", "Address Name:", "127.0.0.1");      //Server))
  //ClientSocket->Address
  //ClientSocket->Host = Server;
  ClientSocket->Address="127.0.0.1";
  ClientSocket->Open();
  //ClientSocket->Active = true;
  FileListenItem->Checked = false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::Exit1Click(TObject *Sender)
{
  ServerSocket->Close();
  ClientSocket->Close();
  Close();   
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::Memo1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  if (Key == VK_RETURN)
  {
     if (IsServer){ServerSocket->Socket->Connections[0]->SendText(
         Memo1->Lines->Strings[Memo1->Lines->Count - 1]); }
     else
     { ClientSocket->Socket->SendText(Memo1->Lines->Strings[
        Memo1->Lines->Count -1]);}
  }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::FormCreate(TObject *Sender)
{
  //FileListenItemClick(NULL);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ClientSocketConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteHost;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::Disconnect1Click(TObject *Sender)
{
  ClientSocket->Active = false;
  ServerSocket->Active = true;
  StatusBar1->Panels->Items[0]->Text = "Listening...";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ClientSocketRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo2->Lines->Add(Socket->ReceiveText());
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ServerSocketClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo2->Lines->Add(Socket->ReceiveText());
  OutputDebugString("******************ServerSocketClientRead event*********************");
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ServerSocketAccept(TObject *Sender,
      TCustomWinSocket *Socket)
{
  IsServer = true;
  OutputDebugString("******************ServerSocketAccept***************************");
  //TServerWinSocket *socket=ServerSocket->Socket;
  StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteAddress;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ServerSocketClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo2->Lines->Clear();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ClientSocketDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  FileListenItemClick(NULL);   
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ClientSocketError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
  Memo2->Lines->Add("Error connecting to:" + Server);
  ErrorCode = 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ServerSocketClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
        thread->Terminate();
        thread=0;
        StatusBar1->Panels->Items[0]->Text = "Listening...";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::OnGetThread(TObject *Sender,
      TServerClientWinSocket *ClientSocket,
      TServerClientThread *&SocketThread)
{
      SocketThread=new TMyServerThread(false,ClientSocket);
      thread= SocketThread;
}
//---------------------------------------------------------------------------
void __fastcall TChatForm::OnWindowClose(TObject *Sender,
      TCloseAction &Action)
{
      ServerSocket->Close();
      if(thread!=0)
        thread->Terminate();
}
//---------------------------------------------------------------------------


tserversocket 多线程实例 tserversocke 多线程 通信 立即下载

相关推荐

BCB6中ServerSocket控件的使用

BCB6中ServerSocket控件的使用 & XRF日本理学荧光SMX14仪器数据采集 1、ServerSocket控件

网络基础;套接字编程

5.套接字编程:socket编程 基于UDP协议的socket客户端与服务端通信编程 服务端: 创建套接字; 在内核创建struct socket结构体,使进程和网卡之间建立联系 -1. int socket(int domain, int type, int protocol);// 创建套接字 d...

Blue_Tong的博客 551

c++ builder socket实例

c++ builder下socket编程,TServerSocket、TClientSocket简单的聊天程序

用C++ Builder中的TServerSocket,TClientSocket来写网络通讯程序

本文主要介绍如何在C++ Builder中用TServerSocket,TClientSocket来写一个网络间短包,文件传输的程序,这个程序可以支持:1.局域网上的传输。2.局域网与公网的传输(双向传输),在第二篇文章中我将用socket api写一个客户端和服务器,功能和本文中的功能一样。使用通讯协议TCP,这里的客户端和服务器使用的都是阻塞模式---多线程。Client:.h Filecla

kingcaiyao的专栏 9399

C++ Builder下的socket编程(可实现)

C++ Builder下的socket编程 可实现局域网聊天

c++ builder Tserversocket 代码

c++ builder Tserversocket 代码

C++ builder TServerSocket 组件

//本文在c++ builder 10.3调试通过。 //在以前的文章中介绍了标准的windows socek,本文介绍使用TServerSocket 组件,做服务端。 //1.安装组件 //Component->Install Packages->Add->弹出文件选择框->找到 dclsockets260.bpl->打开->Save //2.新建窗体项目 //2.1在窗体上放置一个TShape组件(Palette->Addtional->TSha

weixin_39926429的博客 1239

多旋翼飞行器设计与控制·Pixhawk4以及外部设备接线(笔记004)

笔记主要来源:Pixhawk 4 接线快速入门 目录 一、Pixhawk 4 的各个接口 二、接线图概览(重要传感器及外围设备) 三、飞控、GPS的安装和方向 四、电源 五、无线电遥控 六、数传电台(可选) 七、SD Card(可选) 八、电机以及其他外设 一、Pixhawk 4 的各个接口 FMU:Flight Management Unit 飞行管理组件 主 FMU 处理器:STM32F765 32 位 Arm® Cortex®-M7,216MHz,2MB...

猪猪的博客 1万+

BCB::TClientSocket,TServerSocket控件

一,首先服务端开启监听 ServerSocket1->Port=StrToInt(5000); ServerSocket1->Active=true; ServerSocket1控件,响应ServerSocket1Listen事件; 二,创建连接 ClientSocket1->Address="127.0.0.1"; ClientSocket1-&g...

dixiongbi7761的博客 497

PyTorch复现PSMNet踩坑全记录:从环境配置到KITTI数据集训练

本文详细记录了使用PyTorch复现CVPR经典立体匹配模型PSMNet的全过程,从环境配置到KITTI数据集训练,特别针对2023年主流软硬件环境中的常见问题提供解决方案。文章重点介绍了PSMNet的金字塔池化模块和堆叠沙漏结构,帮助研究者和工程师快速实现工业级深度估计,节省大量试错时间。

weixin_30897233的博客 328

Conda换源全攻略:从清华源到默认源的保姆级切换教程(附常见问题解决)

本文提供Conda换源的完整教程,详细讲解如何从清华源切换到默认源,包括配置步骤、常见问题解决方案及高级技巧。针对国内开发者遇到的下载速度慢问题,清华源提供了高速稳定的解决方案,同时文章也介绍了恢复默认源的方法和多种镜像源选择。

weixin_28837817的博客 940

如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序

2001年08月19日 18:29:00 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序 网络是一个激动人心的领域,编写网络上的应用程序更是很多程序员向往的情节,然而编写网络程序需要掌握大量的网络传输协议、编程接口和WinSock32 API 函数,正因为如此,要完成从Windows程序员到Web程序员的转变不是一件易事.最近笔者成功的用C++ B

秦梦瑶的专栏 416

一定能解决ROS系统 rosdep update超时问题de简单方法

rosdep update命令使用 1.首先将下面仓库的内容clone到本地 git clone https://github.com/ros/rosdistro.git 记录rosdistro存放地址,例如/home/gec/rosdistro 如果是自己的改成/home/user/rosdistro,其中user表示用户名 2.修改/usr/lib/python2/dist-packages/rosdep2/rep3.py文件 cd /usr/lib/python2/dist-packages/ros

努力是明天快乐的源泉 5万+

如何利用CB5.0 创建用户自己的网上聊天程序

网络是一个激动人心的领域,编写网络上的应用程序更是很多程序员向往的情节,然而编写网络程序需要掌握大量的网络传输协议、编程接口和WinSock32 API 函数,正因为如此,要完成从Windows程序员到Web程序员的转变不是一件易事.最近笔者成功的用C++ Builder 5.0 Enterprise 版编写出了网上聊天程序,特介绍如下:   一、 原理:网络聊天工具需要通过TCP/IP

tie343918860的专栏 636

FT2004(D2000)开发实战之AMD R5 230显卡驱动适配

AMD R5 230显卡驱动适配

嵌入式Linux 3200

实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)

该验证码是异形滑块验证码中的一种,缺口旋转+偏移的处理需要你有很好的图像处理知识,能很好的处理透明通道,同时,该验证码需要你能很好的处理缺口和背景之间匹配的关系,该验证码的处理难点就是两个缺口之间如何找到正确的,两个检测框都有很强的相似度,且加上背景图的干扰,在图像处理和有优化上难度大大增加。

码王吴彦祖的博客 2016
上一篇: 大端模式和小端模式
下一篇: 关于二维指针的代码
梦之安魂曲
博客等级 码龄18年 81粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值