课程设计我聊天程序.doc
文本预览下载声明
实 验 报 告
实验报告名称: 简易聊天程序
学 生 姓 名:
学 生 学 号:
实 验 日 期: 2013 –12—20
实 验 报 告 内 容
简介
本程序是一个简易的聊天程序,在程序里涉及到了网络通信基本理和Socket编程技术。由于程序是在IP环境下运行,所以分服务器端和客户端,服务器端和客户端是通过建立Socket链接来实现聊天功能。
套接字(Socket)是一种双向的通信接口,可以通过这个端口与任何一个具有Socket端口的计算机通信,套接字是网络通信的基础。使用Socket进行网络通信必须包含下面的几种信息:双方认可的协议,本地主机的IP地址,对方主机的IP地址,本地进程的协议端口,对方进程的协议端口。
下面是文本聊天部分所要完成的功能:
1.在这个系统中只要在线就可以和所有使用此程序的且已经在线的朋友进行聊天,每个人有可以有一个昵称,当开始进入时,会在每个人的窗口弹出“有一个游客已经进入”。
2.当输入完聊天信息以后进行发送,当发送没有结束时,不能进行新的聊天内容的输入。一般聊天内容一次不能超过500个字符。
3.工作流程图大致如下:
4. 进行聊天需要建立服务器端Socket和客户端Socket,并且要连接上,这样才能进行信息的传送。
二.操作步骤
1.创建对话框类chat,在向导的第2步骤中,选中windows Sockets.
2.设计对话框“我的聊天程序”,添加相应的控件及其控件变量
3.添加并设计服务端端口类和客户端端口类
三:通信模块关键代码分析:
(1)
//服务器端对客户端Socket的处理代码
void CChatDlg::ProcessPendingAccept()
{
CClientSocket* pSocket = new CClientSocket();
if (m_pListenSocket.Accept(*pSocket))
{
CPackMessg msg;
msg.m_strText=一个游客进入聊天室了;
// m_strShowMessage+=一个游客进入聊天室了\n;
SetDlgItemText(IDC_SHOWMESSAGE,一个游客进入聊天室了\n);
POSITION pos;
for(pos=m_connectionList.GetHeadPosition();pos!=NULL;)
{
CClientSocket * t= (CClientSocket *)m_connectionList.GetNext(pos);
t-SendMessage(msg);
}
pSocket-Init(this);
m_connectionList.AddTail(pSocket);
}
else
delete pSocket;
}
(2)
//客户端连接到服务器的消息相应函数
void CChatDlg::OnConnect()
{
// TODO: Add your control notification handler code here
if(!m_bInit)
{
BYTE f0,f1,f2,f3;
CString name;
((CIPAddressCtrl *)(GetDlgItem(IDC_IPADDRESS)))-GetAddress(f0,f1,f2,f3);
CString ip;
ip.Format(%d.%d.%d.%d,f0,f1,f2,f3);
m_bClient=true;
m_clientsocket.Create();
if(m_clientsocket.Connect(ip,GetDlgItemInt(IDC_PORT)))
{
m_clientsocket.Init(this);
SetDlgItemText(IDC_SHOWMESSAGE,客户端连接成功!);
m_bInit=true;
}
else
{
m_clientsocket.Close();
AfxMessageBox(客户端连接失败!);
m_bInit=false;
}
}
}
(3)
//建立服务器端的消息相应函数
void CChatDlg::OnSetserver()
{
// TODO: Add your control notification handler
显示全部