利用WinSock进行无连接的通信

WinSock提供了对UDP(用户数据报协议)的支持,通过UDP协议我们可以向指定IP地址的主机发送数据,同时也可以从指定IP地址的主机接收数据,发送和接收方处于相同的地位没有主次之分。利用CSocket操纵无连接的数据发送很简单,首先生成一个本地套接口(需要指明SOCK_DGRAM标记),然后利用

int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 )发送数据,

int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 )接收数据。

利用UDP协议发送和接收都可以是双向的,就是说任何一个主机都可以发送和接收数据。但是UDP协议是无连接的,所以发送的数据不一定能被接收,此外接收的顺序也有可能与发送顺序不一致。下面是相关代码:

/*发送方在端口6800上向接收方端口6801发送数据*/

//发送方代码:

BOOL CMy62_s1_clientDlg::OnInitDialog()

{

CDialog::OnInitDialog();

//创建本地套接口

m_sockSend.Create(6800,SOCK_DGRAM,NULL);

//绑定本地套接口

m_sockSend.Bind(6800,"127.0.0.1");

//创建一个定时器定时发送

SetTimer(1,3000,NULL);

...

}

void CMy62_s1_clientDlg::OnTimer(UINT nIDEvent)

{

static iIndex=0;

char szSend[20];

sprintf(szSend,"%010d",iIndex++);

//发送UDP数据

int iSend= m_sockSend.SendTo(szSend,10,6801,"127.0.0.1",0);

TRACE("sent %d byte\n",iSend);

...

}

//接收方代码

BOOL CMy62_s1_serverDlg::OnInitDialog()

{

CDialog::OnInitDialog();

//创建本地套接口

m_sockRecv.Create(6801,SOCK_DGRAM,"127.0.0.1");

//绑定本地套接口

m_sockRecv.Bind(6801,"127.0.0.1");

//创建一个定时器定时读取

SetTimer(1,3000,NULL);

...

}

void CMy62_s1_serverDlg::OnTimer(UINT nIDEvent)

{

char szRecv[20];

CString szIP("127.0.0.1");

UINT uPort=6800;

//接收UDP数据

int iRecv =m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0);

TRACE("received %d byte\n",iRecv);

...

}

/*接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回*/

利用WinSock进行无连接的通信相关推荐

  1. 利用WinSock进行有连接的通信

    利用WinSock进行有连接的通信 WinSock提供了对TCP(传输控制协议)的支持,通过TCP协议我们可以与指定IP地址的主机建立,同时利用建立的连接可以双向的交换数据.利用CSocket操纵有连 ...

  2. 利用三层交换机实现VLAN的通信实验报告

    利用三层交换机实现VLAN的通信实验报告<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  3. 利用委托 实现窗体间通信,非原创

    copy自:https://www.cnblogs.com/hugoNB/p/7130562.html,这个作者写的浅显易懂,就复制下来自己看 实现过程: 这里主要是用到委托实现,所以主要描述一下委托 ...

  4. 在Unity3d项目中利用Udp进行局域网内通信

    在Unity3d项目中利用Udp进行局域网内通信 实现一个用于存储通信息的Quene using System.Collections; using System.Collections.Generi ...

  5. 07 接头暗语:如何利用 Netty 实现自定义协议通信?

    文章目录 07 接头暗语:如何利用 Netty 实现自定义协议通信? 通信协议设计 1. 魔数 2. 协议版本号 3. 序列化算法 4. 报文类型 5. 长度域字段 6. 请求数据 7. 状态 8. ...

  6. stm32利用mqtt与小程序通信

    stm32利用mqtt与小程序通信 stm32连接服务器端 小程序连接服务器 本项目实现的功能如下:通过stm32连接esp8266,然后利用mqtt协议连接到服务器,同时小程序端也连接到服务器,通过 ...

  7. 如何利用Winsock控件编写自己的Internet程序

    VB自带的Winsock控件是一个非常强大的工具,利用它你可以在你的程序中使用各种Internet协议.如果你对网络协议及计算机之间通信的原理有所了解的话,理论上讲你可以编写任何Internet程序. ...

  8. C#中利用Socket实现网络语音通信[初级版本]

    现在时下的VOIP软件很多,比较有名的就是Skype,还有其它诸如UUcall.快门等等.它们提供的功能除了网络上的语音通话外,还可以与固定电话.手机等通话.在本篇中主要介绍利用C#实现语音通信的基本 ...

  9. DirectX编程:C#中利用Socket实现网络语音通信

    现在时下的VOIP软件很多,比较有名的就是Skype,还有其它诸如UUcall.快门等等.它们提供的功能除了网络上的语音通话外,还可以与固定电话.手机等通话.在本篇中主要介绍利用C#实现语音通信的基本 ...

最新文章

  1. 微信小程序自定义轮播图滚动样式 自定义组件轮播图的实现
  2. VUE 动态给对象增加属性,并触发视图更新。
  3. WPF 路由事件初步
  4. C#操作符??和?:
  5. 攻防世界-Misc-something_in_image(秒懂!!)
  6. 覆盖网络 Flannel 0.7
  7. cdn厂商 同兴万点_同兴万点:TXNetworks和CDNetworks让我们傻傻分不清
  8. 用Crossdev安装MIPS交叉编译工具链
  9. vue process.env获取不到_从文档开始,重学vue(下)源码级别
  10. [Oracle 9i] Case Expression and Case Statement in 9i
  11. ArrayList非线程安全
  12. JAVAFX 第三方库 布局 小工具 美化 测试 UI 框架 推荐
  13. 语音识别(ASR)论文优选:A comparison of streaming models and data augmentation methods for robust speech recog
  14. 小程序制作宋词欣赏海报
  15. arccotx图像在matlab,arccotx图像(cotx的定义域和图像)
  16. 2020年9月23日 晴(补2020年9月22日 晴)
  17. 电脑一直重新启动怎么回事
  18. 【C语言程序设计】实验 1
  19. YTU OJ 2914 Problem A xiaoping学构造函数
  20. 为什么神经网络层数越多越好?训练次数与层数的区别与联系

热门文章

  1. IntelliJ IDEA 远程deBug jar包
  2. Sharepoint 弹出消息提示框
  3. Windows系统安装教程
  4. C/S模型之TCP协议
  5. 用C语言扩展lua模块(入门)
  6. bzoj 2844 子集异或和名次
  7. 奇偶排序(OddEven Sort)----(排序算法十一)
  8. 【C/C++】友元函数和友元类
  9. Hadoop,Hbase伪集群安装步骤
  10. (七) UVC框架分析