1. 程式人生 > >MFC UDP CSocket實現區域網通訊

MFC UDP CSocket實現區域網通訊

  1. 派生一個MyScoket 基於CSocket #include
class CChatDlg;

class MySocket : public CSocket
{
public:
    MySocket();
    MySocket(CChatDlg* const p_hwnd);//獲得視窗的類指標

    virtual ~MySocket();
public:
    CChatDlg* p_dlgwnd;

    virtual void OnReceive(int nErrorCode);
};
// MySocket

MySocket::MySocket()
{
}
MySocket::MySocket(CChatDlg* const
p_hwnd) { p_dlgwnd=p_hwnd; } MySocket::~MySocket() { } // MySocket member functions void MySocket::OnReceive(int nErrorCode) { CSocket::OnReceive(nErrorCode); //p_dlgwnd->onReceive(); p_dlgwnd->OnReceive(this); }
  • 建構函式 MySocket(CChatDlg* const p_hwnd);//獲得視窗的類指標
  • 重寫 virtual void OnReceive(int nErrorCode); 也就是重寫CSocket類的接收函式

    1. CChatDlg 類

// ChatDlg.h : header file
//

#pragma once
#include "MySocket.h"

// CChatDlg dialog
class CChatDlg : public CDialogEx
{
// Construction
public:
    CChatDlg(CWnd* pParent = NULL); // standard constructor 
// Dialog Data
    enum { IDD = IDD_CHAT_DIALOG };

    protected:
    virtual void DoDataExchange
(CDataExchange* pDX); // DDX/DDV support // Implementation 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: CIPAddressCtrl m_ctrlIPAddress; CString m_strSendMsg; LPSTR message ; CString m_strRevMsg; // 獲取本地IP地址(CString) void SetHostAddress(); afx_msg void OnBnClickedButtonsend(); void OnReceive(MySocket * sock); MySocket* m_MySocket; virtual BOOL DestroyWindow(); virtual void OnOK(); };

 void CChatDlg::OnReceive(MySocket * sock) //接收函式
 {


    unsigned int port=0;
    int datalength;
    CString SAddress;
    datalength=sock->ReceiveFrom(RcvBuffer,BUFFER_LEN,SAddress,port,0);/*埠 RcvBuffer亂碼*/   

    CTime time = CTime::GetCurrentTime();   ///構造CTime物件
    int m_nYear = time.GetYear();      ///
    int m_nMonth = time.GetMonth();      ///
    int m_nDay = time.GetDay();      ///
    int m_nHour = time.GetHour();      ///小時
    int m_nMinute = time.GetMinute();   ///分鐘
    int m_nSecond = time.GetSecond();   ///
    CString m_strTime = time.Format("%Y-%m-%d %H:%M:%S");
    CString m_strT = time.Format("%H:%M:%S");


    CString buffer;
    CString WStr;
    WStr=RcvBuffer;


    buffer.Format(_T("\r\n%s %s said :\r\n%s\n"),SAddress,m_strT,RcvBuffer);
    m_strRevMsg = m_strRevMsg+buffer;

    UpdateData(false);/*將變數寫入控制元件*/

 }
 void CChatDlg::OnBnClickedButtonsend()//點擊發送按鈕,傳送函式SendTo()
 {
     // TODO: Add your control notification handler code here

     /*把控制元件上的值寫入變數*/
     UpdateData(true);
     m_ctrlIPAddress.GetWindowText(m_strIpAddress);/*從控制元件獲取IP地址*/

    USES_CONVERSION;
    message = W2A(m_strSendMsg);

     if(ChatReadString()==1)/* 同臺機器通訊息*/
     {
         if(theApp.m_port==0)
            {
                m_MySocket->SendTo(m_strSendMsg,m_strSendMsg.GetLength()*sizeof(TCHAR),m_rcvport+1,m_strIpAddress,0);/*指定目標埠*/
            }
            else
            {
            m_MySocket->SendTo(m_strSendMsg,m_strSendMsg.GetLength()*sizeof(TCHAR),m_rcvport,m_strIpAddress,0);/*指定目標埠*/
            }
     }
     else /* 不同臺機器通訊息*/
     {
         m_MySocket->SendTo(m_strSendMsg,m_strSendMsg.GetLength()*sizeof(TCHAR),m_rcvport,m_strIpAddress,0);/*指定目標埠*/
     }
 }
// 獲取本地IP地址(CString)
void CChatDlg::SetHostAddress()
{
       char szHostName[MAX_PATH + 1];
       gethostname(szHostName, MAX_PATH);  //得到計算機名
       hostent *p = gethostbyname(szHostName); //從計算機名得到主機資訊
        if(p == NULL)
        {
        AfxMessageBox(_T("得到本機網路資訊失敗!"));
        return ;
        }
        m_strUserName = szHostName;       //儲存主機名//將主機名作為使用者名稱插入資料庫
        int nCount = 0;                 //儲存主機地址
        char *pIP = inet_ntoa(*(in_addr *)p->h_addr_list[0]);//將32位IP轉化為字串IP
        m_strIpAddress = pIP;             //儲存主機IP地址

        m_ctrlIPAddress.SetWindowTextW(m_strIpAddress);/*獲取本地IP地址,並寫入繫結控制元件中去*/
}
  1. UDP面向無連線的套接字程式設計

伺服器:(接收端)
1) 建立套接字(socket)
2) 將套接字繫結到一個本地地址和埠上(bind)
3) 用返回的套接字和客戶端進行通訊(recvfrom);
4) 關閉套接字
客戶端:(傳送端)
1) 建立套接字(socket)
2) 向伺服器傳送資料(sendto
3) 關閉套接字

相關推薦

MFC UDP CSocket實現區域網通訊

派生一個MyScoket 基於CSocket #include class CChatDlg; class MySocket : public CSocket { public: MySocket(); MySocket(CCha

AndroidAsync框架實現區域網通訊

package com.actiview.asynclib; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.

MFC中利用CSocket實現UDP通訊

     原始碼請到此處下載。 基本介面如下:                          UDP通訊時雙方地位是對等的,不用像TCP那樣要在伺服器端設定一個監聽Socket。      第一

TCP和UDP實現socket的簡單通訊

http://www.cnblogs.com/IPrograming/archive/2012/10/15/CSharp_Socket_4.html http://www.cnblogs.com/dolphinX/p/3460545.html 一、TCP和UDP的區別和聯絡 1.五層協議

udp實現廣播通訊

作者:lycclsltt 原文:https://blog.csdn.net/aspnet_lyc/article/details/34444111 特點: 1.資料傳輸不用建立連線,所以不可靠(符合udp協議的特點) 2.資料的傳送是面向整個子網的,任何一臺在子網內的計算機都可以接收

如何使處於不同區域網的計算機實現遠端通訊

我們知道處於同一區域網的兩臺計算機,進行通訊的方式很簡單,可以直接通過區域網內的私有ip定位計算機。但是如果要訪問外網即非本區域網的計算機就相對而言比較複雜。 下邊為了更好的理解這個過程,我從幾個問題說起: 1.要訪問一臺遠端非區域網的計算機,哪些是必須知道的?      

C#基於TCP、UDP協議的網路通訊實現(unity)

一、TCP協議: TCP協議是面向有連線的,所以伺服器要與客戶端建立連線 伺服器端: using System; using System.Net.Sockets; using System.Net; using System.Text; public static

cocos2dx的區域網通訊實現----socket函式集初識

學習網路通訊的第一步是要弄清楚網路通訊的模型。首先要對tcp/ip協議模型有個最基本的理解。 然後接著就需要了解一些函式的基本用法和使用方法,比較坑爹的地方是,網路通訊的相關的函式都是很多引數,而且很難理解它的作用。 以下是總結的一些網路通訊函式的基本用法,網路通訊大部分都

在uboot中使用UDP協議實現UDP通訊

本文所講的uboot是基於海思晶片的uboot(如HI3520D)。因為TFTP協議是基於UDP協議,所以本文大部分程式碼是直接使用TFTP的。在寫程式碼之前複習一下TFTP報文和UDP報文的結構。 每行佔64位(bit),共8位元組(byte)。 UDP報文:太網包頭+

在只有一個網線的前提下,實現兩個電腦之間的區域網通訊(伽卡他卡電子教室通訊)...

在現實生活中,會出現只有一個網線,路由器交換機都沒有的情況,這時候怎麼實現兩臺電腦之間的通訊。 舉個簡單例子,實現伽卡他卡電子教室教師端和學生端在一根網線情況下通訊。 我們以Window系統為例,設定IPv4協議IP即可解決。 1、控制面板-網路和Internet-網路連線-本地連線-屬性  2、選擇IPv

python實現區域網內實時通訊

    使用場景,本地伺服器一直在運算資料,實時傳送這些資料給客戶端,本地區域網內其他客戶,可以實時連線伺服器,獲取伺服器資料,互不影響。python2服務端#-*- coding:utf-8 -*- __author__ = '梅俊輝' import socket impo

基於socket通訊的,利用MFC實現TCP通訊的C/S架構程式

1.程式說明       開發環境為VS2012,基於TCP連線的客戶端與服務端的通訊程式,服務端IP為本地網絡卡ip地址或127.0.0.1,預設埠為1234(在程式編寫過程中連線埠要大於1000,否則容易與計算機中某些程式埠衝突導致無法通訊)。 2.socket簡介 M

Linux C UDP Socket實現客戶與伺服器簡單通訊

在linux平臺下用c語言udp協議實現客戶與伺服器的簡單通訊與封裝的實現 一、伺服器端 1、新建CreateServer.c和CreateServer.h檔案,伺服器的建立程式碼在此實現,程式中封裝了建立TcpSocket和UdpSocket伺服器的方法,

UDP】- 實現UDP通訊

目錄 基於LwIP實現UDP通訊 1 什麼是UDP UDP,即使用者資料包協議,屬於TCP/IP 中的傳輸層。同樣,TCP,即傳輸控制協議,也是屬於TCP/IP傳輸層。這兩者區別在此處不加以解釋,本文主要講解如何通過LwIP實現UDP傳輸。 UDP

Qt實現區域網通訊軟體(仿QQ版本)

Qt5實現的區域網通訊工具,支援公網。類似軟體百度一大把,但是還是想整理一份屬於自己的專屬QQ。支援跨平臺。 1目的           本文主要介紹利用Qt實現區域網通訊的主要實現流程和一些技術知識點的設計說明。 2總體設計 2.1 功能特點 這款區域網通訊軟體是基

udp如何實現可靠性傳輸?

不能 處理 pad 實體 特性 name 們的 生成 tro 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 目錄(?)[+] 1udp與tcp的區別 TCP(TransmissionControl Protocol 傳輸控制協議)

PHP + Redis 訂閱/發布 實現即時通訊功能

PHP Redis 訂閱/發布 即時通訊 最近比較忙,沒時間更新博客,先暫時記下,待後續補充 Redis Sub/Pub 訂閱/發布 待編輯 PHP + Redis 訂閱/發布 實現即時通訊 待編輯 PHP + Redis 訂閱/發布 實現即時通訊功能

FPGA千兆網UDP協議實現

技術 pga 進程 linux class inf fin font spa 上一篇百兆網接口的設計與使用,我們接著來進行FPGA百兆網UDP(User Datagram Protocol)協議的設計。 1)UDP簡介 在此,參考博主夜雨翛然的博文“https://w

TCP與UDP,可靠UDP如何實現

edi 重傳 content 低延時 連接 速度 nbsp tcp 發送 兩種協議都是傳輸層協議,為應用層提供信息載體。 TCP協議是基於連接的字節流的可靠協議,有三次握手,四次揮手,超時重傳,流量控制(滑動窗口),擁塞控制和差錯控制,也正因為有可靠性的保證和控制手段,所

django如何實現區域網訪問?

1.預設執行ip,port:127.0.0.1:8000 2.指定ip,port執行: 例如:伺服器的ip地址為:192.168.214.1 則如下配置: 執行伺服器:python3 manage.py runserver 192.168.214.1:8000 在settings