MFC UDP CSocket實現區域網通訊
- 派生一個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類的接收函式
- 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地址,並寫入繫結控制元件中去*/
}
- 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