VC设计用vstudio编写的一个可以实现客户端与服务器的双向传输系统
分享给在学习c++的人借鉴参考下
欢迎提供意见
一、实验目的
通过实验,使学生熟悉并掌握运用TCP/IP技术进行网络编程的基本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用VC++进行一些简单的网络应用程序设计。
二、实验内容
创建套接字向服务器发起TCP连接。(或是客户端创建数据报套接字)
2、服务器创建监听套接字,监听客户端TCP连接请求。当收到一个TCP连接请求,创建连接套接字同意与其创建连接。
3、连接创建成功后,通过套接字向服务器持续发送或是接收数据。
三、关键代码
1、为了在Dlg中调用CSocket类的成员函数,必须在*Dlg.h头文件中添加CSocket类的头文件,并且在Dlg的构造函数中定义一个隶属于CSocket类的对象:
#include "ClientSocket.h"
// ClientTestDlg.h : 头文件
//
#include "Client_Socket.h" //新添加类的头文件
#pragma once
// CClientTestDlg 对话框
class CClientTestDlg : public CDialogEx
{
// 构造
public:
CClientTestDlg(CWnd* pParent = NULL); // 标准构造函数
CClientSocket m_ClientSocket; //为服务器通信而建立的“CClient_Socket”类的对象
// 对话框数据
enum { IDD = IDD_CLIENTTEST_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CString m_IPAddress;
int m_port;
CString m_SendData;
CListBox m_ReceiveData;
afx_msg void OnBnClickedConnent();
afx_msg void OnBnClickedDisconnect();
afx_msg void OnBnClickedSend();
};
2、功能模块(与服务器链接,并向服务器发送数据)
void CClientTestDlg::OnBnClickedConnent()
{
// TODO: 在此添加控件通知处理程序代码
m_ClientSocket.Create(); //创建客户端的套接字
UpdateData(true); //获取IP地址与Port号的更新
if(!m_ClientSocket.Connect(m_IPAddress,m_port)) //Connect()函数链接服务器成功的话则返回1,失败则返回0
{
MessageBox("Server Connect failure");
m_ClientSocket.Close();
return;
}
else
MessageBox("Server Connect Success");
//后台可以直接写m_ClientSocket.Connect(“192.168.1.100”,700)
}
void CClientTestDlg::OnBnClickedDisconnect() //主动断开与服务器的链接
{
// TODO: 在此添加控件通知处理程序代码
m_ClientSocket.Close();
m_ReceiveData.AddString("断开与服务器的链接");
}
void CClientTestDlg::OnBnClickedSend() //向服务器发送数据
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
m_ClientSocket.Send(m_SendData,m_SendData.GetLength());}
2、通过改写Socketl类的虚函数OnReceive()来监听Socket缓冲区是否有数据到达。
// ClientSocket.cpp : 实现文件
#include "stdafx.h"
#include "ClientTest.h"
#include "ClientSocket.h"
#include "ClientTestDlg.h"
void
CClientSocket::OnReceive(int nErrorCode)
{ // TODO: 在此添加专用代码和/或调用基类
char strData[200]; //定义一次接受最多200个字符
int n=Receive(strData,200); //Receive()是CSocket类的成员函数,不是虚函数,具体负责接收数据
strData[n]='\0';
CString strDemo;
strDemo.Format("收到服务器数据: %s,strData");
((CClientTestDlg*)(AfxGetApp()->m_pMainWnd))->m_ReceiveData.AddString(strDemo);
CSocket::OnReceive(nErrorCode);
}
四、编程界面及运行结果截图 五、心得体会 此程序的功能达到了之前预想的可能,通过服务器端的消息发送,实现了客户端与服务器之间的连接,实现了一个简单的网络聊天软件的功能。通过此次的实验,也同时让我对于CSocket网络聊天类的使用有了更深入的了解,在关于网络编程的方面也有了新的认识。虽然此程序的功能还比较的简单,而且某些方面还没能完善,但是,我相信我只是一个开始。 在这次实验中,我对vc++语言有了一个更深的认识了解,也对这学期的知识得到了巩固,还尝试了运行编程,每次运行程序成功,让我对下面的项目充满了信心通过自己的努力最终把最初的理论知识转化成基本技能,这次的实验,使我对c++语言的学习产生了的兴趣。
全部资料51hei下载地址:
|