前面已经说过,wince里面如果要用已经封装好的类的话,必须用CCeSocket

建立一个简单的客户端服务器程序
客户端PDA,
服务器用win2000,随便建立一个能接受连接的程序就好(因为我已经有我的中间件了,有空我再写一个)

DPA程序:

客户端程序.gif

很简单,就三个按钮
先在.h文件加上
private:
 CCeSocket m_socket;

连接按钮的代码:

void CCSocketDemoDlg::OnButtonConnect() 
{
    
// TODO: Add your control notification handler code here
    UpdateData(TRUE);
    m_socket.Create();    
    
if(m_socket.Connect(m_strIP,m_iPort)){
        AfxMessageBox(L
"连接成功");
    }
else{
        AfxMessageBox(L
"连接失败");
        m_socket.Close();
    }

}



断开按钮的代码

void CCSocketDemoDlg::OnButtonDisconnect() 
{
    
// TODO: Add your control notification handler code here
    m_socket.Close();
}

发送按钮的代码:

void CCSocketDemoDlg::OnButtonSend() 
{
    
// TODO: Add your control notification handler code here
    char m_pChar[1000];
    
if(m_socket.Send(m_pChar,1000)==SOCKET_ERROR){
        AfxMessageBox(L
"发送失败");
    }
else{
        AfxMessageBox(L
"发送成功");
    }

}

现在来做一些试验
试验1:
            连接的IP是真实存在的,但是服务端程序没有开
            按下连接后,大概2-3秒后弹出“连接失败”
试验2:
            连接的Ip是不存在的,例如:192.168.0.107,没有机器是这个IP
            按下连接后,程序停止了相应,也就是说connect函数是同步的,大概10多秒后,弹出“连接失败”
试验3:
            连接IP存在,而且服务器程序也打开了
            按下连接后,很快就弹出“连接成功”
试验4:
            在试验4的基础上,按下发送,发送1000个字节的数据(数据的内容不管,是什么都没有关系)
            按下发送后,很快弹出“发送成功”,这个send是同步的还是异步的呢?呵呵,不知道,继续试验
试验5:
            拔下网卡,连usb也拔了吧
            按下发送,乖乖,网络都断了,竟然还弹出“发送成功”,很显然send应该是异步的,而且没有捕获错误
试验6:
            限制PDA到服务器的带宽,限制个很低的值,入1000bps,用Bandwidth Controller Standard,这个软件
            按下发送,直接就是弹出发送成功,呵呵,理论上完成发送大概需要10秒种的。
            

就这几个试验,需要改进的
1:连接时间,一个程序要是2-3秒都连接不上,应该就是网络断了,这个等待10多秒让程序好像死在那里一样不是很可取。
2:如何获得连接中断的消息,不然连接中断了,用send还是成功,还有一点,ccesocket里面的onclose是没有用的,别指望这个函数。