C++和flex实现聊天室功能
公司安排开始做服务器,没有接触过这些东西。从零开始学习。
项目是做个聊天系统客户端用flex,服务器用C++,让我先出Demo。
服务器部分参照Windows网络编程一书中的select例子,基本一样,只是把例子中的的单个回应消息改成了群发消息。
虽然我对select模型还不熟悉,但是我知道如果要在一个套接字上发消息就必须设置FD_SET WriteSet,如果要在一个套接字上读消息就必须设置FD_SET ReadSet,设置就是调用函数FD_SET(SOCKET S, FD_SET* Set)。(就因为明白了这一点才改出了群发)
模型好多啊,慢慢学。
先贴代码
服务器 CSelectIO 类 就是改写了书上的例子
SelectIO.h:
class CSelectIO
{
public:
CSelectIO(void);
virtual ~CSelectIO(void);
public:
bool Init(int port);
private:
void Strat();
void Send();
bool CreateSocketInformation(SOCKET s);
void FreeSocketInformation(DWORD Index);
private:
int TotalSockets;
LPSOCKET_INFORMATION SocketArray[FD_SETSIZE];
SOCKET ListenSocket;
SOCKET AcceptSocket;
SOCKADDR_IN InternetAddr;
WSADATA wsaData;
FD_SET WriteSet;
FD_SET ReadSet;
DWORD Flags;
DWORD SendBytes;
DWORD RecvBytes;
DWORD Total;
WSABUF SendDataBuf;
};
SelectIO.cpp:
#include "StdAfx.h"
#include "SelectIO.h"
CSelectIO::CSelectIO(void)
:TotalSockets(0)
{
}
CSelectIO::~CSelectIO(void)
{
}
bool CSelectIO::Init(int port)
{
//初始化
int ret;
if ((ret = WSAStartup(0x0202,&wsaData)) != 0)
{
printf("WSAStartup() failed with error %d\n", ret);
WSACleanup();
return false;
}
//创建端口
if ((ListenSocket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)
{
printf("WSASocket() failed with error %d\n", WSAGetLastError());
return false;
}
InternetAddr.sin_family = AF_INET;
InternetAddr.sin_addr.s_addr = htonl(INADDR_ANY);
InternetAddr.sin_port = htons(port);
//绑定
if (bind(ListenSocket, (PSOCKADDR) &InternetAddr, sizeof(InternetAddr))
== SOCKET_ERROR)
{
printf("bind() failed with error %d\n",
相关文档:
<?xml version="1.0" encoding="utf-8"?>
<!-- http://yecon.blog.hexun.com/31030831_d.html -->
<!-- http://www.slsay.com -->
<Application name="FileReference_load_test"
xmlns="http://ns.adobe.com/mxml/2009"
xmlns:mx="library:adobe/flex/halo"
xmlns:net= ......
润乾即时报表不仅可以通过拖拽的方式轻松实现各种常见类型的web报表制作,而且在展现报表时还提供了灵活的Flex工具条,可以通过Flex工具条实现调整列宽、排序和过滤显示数据等功能。下面就先简单的介绍一下如何使用Flex工具条调整列宽。 我们设计一个简单类型的报表,报表查看如下图 在上图中我们可以看到,当雇员地址过� ......
前几天写了关于Keil与C/C++混合编程的若干问题,今天写的是继续前面的。
在使用C/C++混合编程的时候,程序运行到类里面的虚拟函数时死掉,查看其vptr值为0x00000000,这时候不知道怎么解决,后来自己编了一个实例程序可以通过,发现vptr的值是在__main里面的& ......
package
{
import mx.containers.Panel;
import mx.controls.Button;
import flash.events.Event;
import mx.events.FlexEvent;
import flash.events.MouseEvent;
import mx.controls.Alert;
/**
* This class is used to create a Custom Panel
* with Maximum, Minimum, close
* and also drag p ......