游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2089|回复: 0

快乐魔导师,问你个VC下的一个小聊天程序的问题

[复制链接]

2

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2004-11-22 15:50:00 | 显示全部楼层 |阅读模式
用VC6.0向导生成的程序框架(Dialog-based),
服务器端:有个按钮用于启动服务器,一个编辑框(CEdit m_message_receive)用于显示收到的数据,一个编辑框(CString m_message_send)用于发送数据;
客户端:有个按钮用于发出连接,两个编辑框同样的作用;
服务器端:定义了CSocket的继承类指针各一,一为CListenSocket *listenSkt,一为CClientSocket *clientSkt,前者用于监听连接,后者用于接受一个连接;
服务器对话框构造函数内分别置为NULL;
思路为:套接字只监听消息,并通知对话框。
主要函数为:
启动监听----
void CChatServerDlg::OnStartServer(){
if(listenSkt!=NULL) {AfxMessageBox("server has been started!");return;}
listenSkt=new CListenSocket(this);//建立监听套接字
clientSkt=NULL;
if(!listenSkt->Create(4000)){//端口为4000
        AfxMessageBox("Cann't start server!");
        return;
}
       
if(!listenSkt->Listen()){//开始监听
        AfxMessageBox("listen failour!");
        return;
}
   clientSkt=NULL;
AfxMessageBox("Server has started and been listening");       
}
接受连接请求:
void CChatServerDlg::AcceptConnection(){
        clientSkt=new CClientSocket(this);
        if(!listenSkt->Accept(*clientSkt)){
                AfxMessageBox("socket 接受异常!");
                return;
        }
        CString mes="connection has been created";
        clientSkt->Send(mes.operator LPCTSTR(),mes.GetLength());       
}
将收到的数据显示在编辑框(m_message_receive)内:
void CChatServerDlg::ReceiveMessage(CClientSocket* skt){
        char mes[100];
        CString message;message.Format("%s",mes);
        skt->Receive(mes,100);
        int length=strlen(mes);
        mes[length]='\n';mes[length+1]='\0';
        int len=m_message_receive.GetWindowTextLength();
        m_message_receive.SetSel(len,len);
        m_message_receive.ReplaceSel(message);
        UpdateData(false);
}
发送数据:
void CChatServerDlg::OnSend()
{   UpdateData(false);
        clientSkt->Send(m_message_send.operator LPCTST(),m_message_send.GetLength());       
        m_message_send="";
        UpdateData(true);
}

以下为客户端:
定义一CSocket类的继承类CClientSocket* clientSocket;
基本实现同服务器端差不多,
连接服务器为:
void CChatClientDlg::OnConncetToServer() //socket 为客户端套接字
{
        if(socket!=NULL) {AfxMessageBox("connection has been created.");return;}
        socket=new CClientSocket(this);
    if(!socket->Create()){
                AfxMessageBox("socket create failour!");
                return;
        }
        if(!socket->Connect("gxl",4000)){
                AfxMessageBox("connect to server failor");
                return;
        }
        AfxMessageBox("connection has been created.");
}

本以为是个极简单的程序,但不能如愿工作:
一:客户端发不出信息,虽然连接上了;
二:也受不到服务器端发来的信息;
还有顺便问一下:怎么在编辑框内输入一行数据,然后在输入另一行?
不好意思,一个学习非常郁闷,出了问题找不到人请教,总得不到解答,无意中看到这个网站,象看到了救星,盼望高手不要耻笑这么低级的问题,有时道理已经弄的很清楚,实现起来还是会有点问题。
附上原件:

sf_20041122155015.rar

12.49 KB, 下载次数:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 10:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表