WinSock通讯

在WINCC中使用WinSock控件与倍加福RFID进行TCP_IP通讯 在柔性制造FMS系统中,本次项目以西门子PLC300,PLC200和倍加福RFID构建自动化输送和立体仓库物流方案。   硬件: 1、一个西门子PLC300为主站,四个PLC200为从站 2、倍加福RFID IC-KP-B17-AIDA1 IDENTControl interface with Ethernet interface的识别系统 系统: 因为西门子PLC,选用WinCC 阅读详情
利用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进行有连接的通信

WinSock提供了对TCP(传输控制协议)的支持,通过TCP协议我们可以与指定IP地址的主机建立,同时利用建立的连接可以双向的交换数据。利用CSocket操纵有连接数据交换很简单,但是在有连接的通信中必需有一方扮演服务器的角色等待另一方(客户方)的连接请求,所以服务器方需要建立一个监听套接口,然后在此套接口上等待连接。当连接建立后会产生一个新的套接口用于通信。而客户方在创建套接口后只需要简单的调用连接函数就可以创建连接。对于有连接的通信不论是数据的发送还是发送与接收的顺序都是有保证的。双方的函数调用顺序。

下面的代码演示了如何建立连接和发送/接收数据:

/*
服务器方在端口6802上等待连接,当连接建立后关闭监听套接口
客户方向服务器端口6802发起连接请求
*/
BOOL CMy63_s1_serverDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        CSocket sockListen;
        //创建本地套接口
        sockListen.Create(6802,SOCK_STREAM,"127.0.0.1");
        //绑定参数
        sockListen.Bind(6802,"127.0.0.1");
        sockListen.Listen(5);
        //等待连接请求,m_sockSend为成员变量,用于通信
        sockListen.Accept(m_sockSend);
        //关闭监听套接口
        sockListen.Close();
        //启动定时器,定时发送数据
        SetTimer(1,3000,NULL);
...
}
void CMy63_s1_serverDlg::OnTimer(UINT nIDEvent)
{
        static iIndex=0;       
        char szSend[20];       
        sprintf(szSend,"%010d",iIndex++);       
        //发送TCP数据
        int iSend= m_sockSend.Send(szSend,10,0);
...
}
BOOL CMy63_s1_clientDlg::OnInitDialog()
{
        CDialog::OnInitDialog();
        //创建本地套接口
        m_sockRecv.Create();
        //发起连接请求
        BOOL fC=m_sockRecv.Connect("127.0.0.1",6802);
        TRACE("connect is %s/n",(fC)?"OK":"Error");
        //启动定时器,定时接收数据
        SetTimer(1,3000,NULL);
...
}
void CMy63_s1_clientDlg::OnTimer(UINT nIDEvent)
{
        char szRecv[20];       
        //接收TCP数据
        int iRecv =m_sockRecv.Receive(szRecv,10,0);
        TRACE("received %d byte/n",iRecv);       
        if(iRecv>=0)
        {
                szRecv[iRecv]='/0';
                m_szRecv=szRecv;
                UpdateData(FALSE);
        }
...
}
 
WinSock API封装与局域网即时通讯工具开发 本文还有配套的精品资源,点击获取 简介:本文详细介绍了WinSock API核心函数及其在Windows平台网络通信程序中的应用,并探讨了如何封装这些API以构建基于局域网的一对一即时通讯工具。通过理解 WSAStartup() 、 socket() 、 bind() 、 listen() 、 accept()... 阅读详情

相关推荐

打造基于Winsock控件的简易即时通讯工具

本文还有配套的精品资源,点击获取 简介:本文将全面讲解如何利用Winsock控件构建一个类似于QQ的简易聊天工具,涵盖C/S架构、Winsock控件的使用方法、用户界面设计、安全性与稳定性、多线程技术以及数据库支持等关键技术点,帮助程序员掌握创建即时通讯软件的全过程。 1. Winsock控件基础与应用 1.1 Winsock控件简介 Winsock控...

weixin_35749440的博客 1712

CAsyncSocket进行UDP通信

客户端代码: CString m_ServerIP;CString m_ClientIP;int m_ClientPort;CString m_ReceiveData;UINT m_ServerPort;CAsyncSocket m_sockReceive;m_ServerIP="127.0.0.1";m_ClientIP="127.0.0.1";m_Clien...

weixin_30732487的博客 464

使用winsock进行通讯

powerbuilder中使用winsock进行通讯的例子powerbuilder中使用winsock进行通讯的例子

用Winsock实现点对点通信

w insock控件是VB5.0的新增功能,它解决了以往应用VB编程时网络中应用程序之间无法实现点对点通信的难题。Winsock使用的TCP协议和UDP协议允许建立并保持一个到远程计算机上的连接,且可以在连接结束之前实时地进行数据交换。用户仅通过设置属性并借助事件处理就能够轻而易举地连接到一个远程的计算机上,而且只用两个命令就可以实现数据交换。  使用TCP协议时,如果需要创建一个客户应用程序,就

beta的专栏 2243

基于winsock的简单TCP通讯

该程序是基于winsock实现的TCP客户端/服务器通讯

腾讯云运维工程师认证TCA--真题(最新2022.11)

解析:云原生应用的12要素,1.基准代码:一份基准代码,多份部署;解析:腾讯云主账号具备对其名下资源(包括存储桶)的最大权限,您虽然可以在存储桶策略中限制几乎所有操作,但主账号始终具备 PUT Bucket Policy 操作的权限,主账号调用该操作不检查存储桶策略。解析:瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。解答:云原生五大关键技术:微服务、容器化、DevOps、持续交付。

e1210101的博客 9915

MFC中的CAsyncSocket的使用之一

CAsyncSocket类是从Object类派生而来。CAsyncSocket对象称为异步套接字对象 使用CAsyncSocket进行网络编程,可以充分利用Windows操作系统提供的消息驱动机制,通过应用程序框架来传递消息,方便地处理各种网络事件。另一方面,作为MFC微软基础类库中的一员,CAsyncSocket可以和MFC的其他类融为一体,大大扩展了网络编程的空间,方便了编程。 ...

weixin_44641897的博客 1238

手把手教你用GD32F407VET6的EXMC驱动外部SRAM,搞定大内存需求

本文详细介绍了如何使用GD32F407VET6的EXMC外设驱动外部SRAM,解决嵌入式开发中的大内存需求问题。通过硬件连接方案、EXMC时序配置与初始化步骤,以及软件集成与内存管理技巧,帮助开发者快速实现内存扩展。特别适合需要处理图形显示缓冲、音频处理等大内存场景的GD32F407开发者。

weixin_30752699的博客 346

用VC6的Socket收发数据,触发事件,从CAsynySocket类派生,将其打包成一个类

  客户端: class CClientSocket : public CAsyncSocket 在主对话框上加个按钮,在按钮函数中: void CClientDlg::OnButtonConnect() //连接服务端{ // TODO: Add your control notification handler code here  clientSocket.Create();//调用...

wmnmtm的专栏 312

双击文件夹弹窗“找不到应用程序”,但是右键点击打开可以

此电脑、回收站、c、d、f盘、控制面板、任意文件夹等都没有办法双击打开。 右键中包含“使用filemanager打开”,是由于FileManager卸载残留导致的。 懒人专用附件 下载解压上面附件,双击导入可以清理FileManager软件残留 参考: 双击此电脑出现找不到应用程序,但是右键点击可以-其他-优快云问答https://ask.youkuaiyun.com/questions/7631439 电脑上的文件夹双击都提示找不到应用程序,但是右击打开就能打开,该怎么解决? - 知乎 (z

webmasterqpwou的博客 1万+

看完让你的RSA提升一个台阶 [GKCTF 2021]RRRRsa

我是,今天我给大家分享一个关于RSA的题目,带大家领略的魅力。今天开始前,我们先学习一下。

m0_62102520的博客 852

winsock实现TCP通信

对于多字节数据在内存中有两种存储方式: Little-endian:低字节在前,高字节在后; Big-endian:高字节在前,低字节在后 网络协议在处理多字节整数时,采用的是高端字节序,在编程时一定要考虑主机字节顺序与网络字节顺序的相互转换。 1      WinSock基本 1.1     加载/卸载WinSock库 如果装载Winsock1,那么必须include<Winsoc...

liudongdong_jlu 3339

AIDL HAL服务从零到一:构建现代Android硬件抽象层

本文详细介绍了从零开始构建现代Android AIDL HAL服务的完整流程。通过定义接口、实现服务逻辑、配置构建与VINTF清单,并最终集成到系统镜像,开发者可以掌握利用AIDL替代传统HIDL来开发硬件抽象层的核心方法。文章重点解析了AIDL HAL的创建流程,并对比了其与HIDL在语法、工具链和集成方式上的优势,帮助开发者高效构建稳定的硬件接口。

weixin_29174141的博客 145

PB中用winsock做点对点通讯

用winsock做点对点通讯,已经成功,太棒了。今天 发送和接收字符都没有问题。 明天继续。发送二进制数据看看。网上很多不负责任的人说PB中不用能。今天证明可以发送和接收数据。 以前用过powerTCP,很不错,可是要收费并且使用也麻烦,还是用MS自带的好啊。 其实步骤也很见单,只是在PB中用到这个的较少,也用过别人写的winsock.pbl,但是总觉得那东西,不稳定,...

weixin_34341117的博客 369

[arcgis插件]在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面

在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面。

坐听风雨 4563

centos 添加新硬盘,对根目录扩容

本地安装了虚拟机,系统为centos7,使用过程中,渐渐地发现磁盘容量不够用了,于是在虚拟机中新增了一块硬盘。 进入系统内查看: sdb是新增的硬盘,大小为40g。 接下来有两种方式,一种是普通方式直接挂载。https://blog.youkuaiyun.com/qq_39314099/article/details/106200322 这样的话只有在挂载点的目录下操作才能使用到这个新硬盘,不是很理想。 还有一种方式lvm,逻辑卷管理的方式。 LVM简单介绍: 它是 Linux 下对磁盘分区进行管

qq_39314099的博客 1万+

Windows Sockets(WINSOCK)通讯端错误讯息

Windows Sockets(WINSOCK)通讯端错误讯息 Windows Sockets通讯端错误表 错误号码 10004 中止操作被 WSACancelBlockingCall 呼叫打断。 10009 提供的档案控制不正确。 10013 尝试存取套接字被拒绝,因为访问权限不足。 10014 在尝试使用指标自变量进行呼叫时,系统侦测出一个不正确的指针地址。 10022 提供了

hireboy的专栏 2419

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏(附项目源码)

当今游戏产业中,经典游戏的复刻一直是一项受欢迎且具有挑战性的任务。俄罗斯方块是一个深入人心、令人上瘾的经典游戏,在过去几十年里一直享有广泛的流行度。其简单而富有策略性的玩法吸引了无数玩家的关注。因此,我决定利用Unity引擎来复刻这款经典游戏,以让更多的人重新体验其中的乐趣。通过使用Unity引擎,我能够利用其强大的工具和功能,从头开始构建一个与原版俄罗斯方块游戏相似的游戏。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2796

基于WINSOCK控件的VC网络通讯程序

利用Winsock控件可以编制一个简单的通讯程序,用于局域网之间的微机通讯。 1 Winsock控件的使用方法 1.1通讯协议的选择 Winsock控件提供了访问 TCP 和 UDP 网络服务的方便途径。采用TCP协议可以提供双向的、可靠的、有序的和无重复投递的数据流。TCP允许创建和维护与远程计算机的连接,连接两台计算机就可彼此进行数据传输。用户数据文报协议 (UDP) 是一个无连接协议。

fjclc2008的专栏 2342

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB多用户Winsock控件通讯实例

有一位优快云的朋友不明白如何利用Winsock控件进行多用户之间的网络通讯,于是俺写了一个,希望对有此方面需要的朋友有所帮助!    本代码可以同时支持多个客户端的连接、识别和通讯,主要思路是在连接成功后,由客户主动发送一个用户名,服务器端以此用户名对客户进行区分,为防止同名客户,服务器端在用户名后加了一个后缀。由于写得匆忙,难免有失误,恳请指正!    服务器代码如下:Op

lyserver的专栏 8389

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Winsock学习2:用winsock实现socket通讯的client端。

编译环境:VC++6.0/* *File:client.cpp * */#include #include #include #define DEFAULT_PORT 5150#define DEFAULT_BUFFER 4096#define DEFAULT_MESSAGE "LOGIN"#define DEFAULT_COUNT 20int   iPort  = DEFAULT_PORT;ch

camel的blog 1636

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

用WINSOCK API实现同步阻塞方式的网络通讯

<br /> 在VB中进行网络通讯时,一般都爱使用Winsock控件,但此控件有两点缺点,一是需要一个窗口(当然也可以修改vbp文件,实现无窗口加载Winsock控件),二是通讯方式为异步非阻塞的,对于某些基于应答式的协议来说,比如HTTP、POP3、SMPT等,使用阻塞方式往往要方便得多,而且代码流程也清晰得多,增强了可读性,更不用说灵活性了(比如超时设置、缓冲区设置等)。虽然网络上有一些使用API编写的通讯类,但大类使用了WSAAsyncSelect方式,完全是Winsock的API版本,根本没啥意义,

s170301048的专栏 763

WinSock UDP通讯实例

下载 #include<WinSock2.h> #include<stdio.h> #definePORT8888 intmain()//server { WSADATAwsaData; intRet=WSAStartup(MAKEWORD(2,2),&wsaData); printf("Server!\...

weixin_30419799的博客 195

(QT) QUdpSocket / 在QT中通过Winsock2实现UDP通讯

最近在编写一个网络通讯模块,需要用到QUdpSocket,但因Qt5.6以后版本放弃兼容XP系统,而不少客户因为早些购买的电脑配置低的问题,不能安装Win7以上的系统,需要的功能也并不是很多,主要用来调试设备或终端播放的功能,所以还是选择Qt5.6。 在使用Qt5.6版本时遇到一个问题:只能从客户端发送数据,不能从客户端接收服务端返回的数据。 发送数据: writeDatagram(con...

科学技术是第一生产力 2233
上一篇: WinSock基础
下一篇: 用来生成CAB安装文件的.inf文件制作(英文版)
JamesXing
博客等级 码龄20年 30粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值