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);
}
N1[I)SJHE42E]G2DY}Z9VGW.png (53.91 KB, 下載次數: 73)
下載附件
2019-4-19 15:32 上傳
四、編程界面及運行結果截圖 五、心得體會 此程序的功能達到了之前預想的可能,通過服務器端的消息發送,實現了客戶端與服務器之間的連接,實現了一個簡單的網絡聊天軟件的功能。通過此次的實驗,也同時讓我對于CSocket網絡聊天類的使用有了更深入的了解,在關于網絡編程的方面也有了新的認識。雖然此程序的功能還比較的簡單,而且某些方面還沒能完善,但是,我相信我只是一個開始。 在這次實驗中,我對vc++語言有了一個更深的認識了解,也對這學期的知識得到了鞏固,還嘗試了運行編程,每次運行程序成功,讓我對下面的項目充滿了信心通過自己的努力最終把最初的理論知識轉化成基本技能,這次的實驗,使我對c++語言的學習產生了的興趣。
0.png (3.36 KB, 下載次數: 78)
下載附件
2019-4-19 17:52 上傳
全部資料51hei下載地址:
VC程序設計實驗報告.docx
(934.64 KB, 下載次數: 19)
2019-4-19 16:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
kehuduan.rar
(1.32 MB, 下載次數: 26)
2019-4-19 15:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|