TCP通信示例程序

服务器端程序:

  1. /* 
  2. 程序名称:TCP通信示例程序服务器端 
  3. 作者:天行健 
  4. 完成时间:2010-4-2  17:00 
  5. */  
  6. #include <iostream>   
  7. #include <WINSOCK2.h>   
  8. using namespace std;  
  9. #pragma comment(lib,"wsock32.lib")   
  10. #define BUF_SIZE 64   
  11.   
  12. void main()  
  13. {  
  14.     WSADATA wsd;                //WSADATA变量   
  15.     SOCKET sServer,sClient;        //服务器端和客户端套接字   
  16.     int retVal;                    //返回值   
  17.     char buf[BUF_SIZE];            //存放客户端发来的字符的缓冲区   
  18.   
  19.     //第一步:初始化套接字动态库   
  20.     if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)  
  21.     {  
  22.         cout<<"WSAStartup failed!"<<WSAGetLastError()<<endl;  
  23.         return;  
  24.     }  
  25.   
  26.       
  27.     sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
  28.     if(sServer==INVALID_SOCKET)  
  29.     {  
  30.         cout<<"socket failed:"<<WSAGetLastError()<<endl;  
  31.         WSACleanup();            //释放套接字资源   
  32.         return;  
  33.     }  
  34.   
  35.     //第二步:绑定套接字   
  36.     SOCKADDR_IN addrServer;        //服务器套接字地址信息   
  37.     addrServer.sin_family=AF_INET;  
  38.     addrServer.sin_port=htons(4999);  
  39.     addrServer.sin_addr.s_addr=INADDR_ANY;  
  40.   
  41.     retVal=bind(sServer,(LPSOCKADDR)&addrServer,sizeof(SOCKADDR_IN));  
  42.     if(SOCKET_ERROR==retVal)  
  43.     {  
  44.         cout<<"bind failed:"<<WSAGetLastError()<<endl;  
  45.         closesocket(sServer);  
  46.         WSACleanup();  
  47.         return;  
  48.     }  
  49.   
  50.     //第三步:监听   
  51.     retVal=listen(sServer,5);  
  52.     if(SOCKET_ERROR==retVal)  
  53.     {  
  54.         cout<<"listen failed:"<<WSAGetLastError()<<endl;  
  55.         closesocket(sServer);    //半闭套接字   
  56.         WSACleanup();            //释放套接字资源   
  57.         return;  
  58.     }  
  59.       
  60.     //第四步:接受客户端连接   
  61.     sockaddr_in addrClient;  
  62.     int addrClientlen=sizeof(addrClient);  
  63.     sClient=accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);  
  64.     if(INVALID_SOCKET==sClient)  
  65.     {  
  66.         cout<<"accept failed:"<<WSAGetLastError()<<endl;  
  67.         closesocket(sServer);  
  68.         WSACleanup();  
  69.         return;  
  70.     }  
  71.   
  72.     //第五步:接收并显示数据   
  73.     ZeroMemory(buf,BUF_SIZE);  
  74.     retVal=recv(sClient,buf,BUF_SIZE,0);  
  75.     if(SOCKET_ERROR==retVal)  
  76.     {  
  77.         cout<<"recv failed:"<<WSAGetLastError()<<endl;  
  78.         closesocket(sServer);  
  79.         WSACleanup();  
  80.         return;  
  81.     }  
  82.   
  83.     cout<<buf<<endl;  
  84.   
  85.     //第六步:退出   
  86.     closesocket(sServer);        //半闭套接字   
  87.     closesocket(sClient);        //半闭套接字   
  88.     WSACleanup();                //释放套接字资源   
  89. }  

 

 客户端程序:

  1. /* 
  2. 程序名称:TCP通信示例程序客户端 
  3. 作者:天行健 
  4. 完成时间:2010-4-2  17:00 
  5. */  
  6. #include <iostream>   
  7. #include <WINSOCK2.h>   
  8. using namespace std;  
  9. #pragma comment(lib,"wsock32.lib")   
  10. #define BUF_SIZE 64   
  11.   
  12. void main()  
  13. {  
  14.     WSADATA wsd;  
  15.     SOCKET sServer;  
  16.     SOCKADDR_IN addrServer;  
  17.     int retVal;  
  18.     char buf[BUF_SIZE];  
  19.   
  20.     //第一步:创建套接字   
  21.     if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)  
  22.     {  
  23.         cout<<"WSAStartup failed!"<<WSAGetLastError()<<endl;  
  24.         return;  
  25.     }  
  26.   
  27.     sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
  28.     if(sServer==INVALID_SOCKET)  
  29.     {  
  30.         cout<<"socket failed:"<<WSAGetLastError()<<endl;  
  31.         WSACleanup();  
  32.         return;  
  33.     }  
  34.   
  35.     //第二步:连接服务器   
  36.     addrServer.sin_family=AF_INET;  
  37.     addrServer.sin_port=htons(4999);  
  38.     addrServer.sin_addr.s_addr=inet_addr("127.0.0.1");  
  39.   
  40.     retVal=connect(sServer,(struct sockaddr*)&addrServer,sizeof(addrServer));  
  41.     if(SOCKET_ERROR==retVal)  
  42.     {  
  43.         cout<<"connect failed:"<<WSAGetLastError()<<endl;  
  44.         closesocket(sServer);  
  45.         WSACleanup();  
  46.         return;  
  47.     }  
  48.   
  49.     //第三步:发送数据   
  50.     ZeroMemory(buf,BUF_SIZE);  
  51.     strcpy(buf,"MY TCP");  
  52.     retVal=send(sServer,buf,strlen(buf),0);  
  53.     if(SOCKET_ERROR==retVal)  
  54.     {  
  55.         cout<<"send failed:"<<WSAGetLastError()<<endl;  
  56.         closesocket(sServer);  
  57.         WSACleanup();  
  58.         return;  
  59.     }  
  60.   
  61.     //第四步:退出   
  62.     closesocket(sServer);  
  63.     WSACleanup();  
  64. }  

 

运行方法:

在DOS窗口中运行服务器端代码编译后生成的EXE程序,然后双击编译客户端代码后生成的EXE程序,即可在DOS窗口中看到 MY TCP 字符,即表示运行成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 西门子Modbus TCP通讯示例程序是一种用于实现设备间数据传输和通信程序。Modbus TCP是一种基于以太网的通信协议,它允许不同的设备之间进行数据的读写和控制。 在西门子Modbus TCP通讯示例程序中,可以使用特定的编程语言(如C++或Java)来实现通信功能。程序首先需要建立与远程设备的连接,通常是使用设备的IP地址和端口号。连接建立后,可以发送和接收数据。 对于发送数据,程序可以创建一个Modbus命令,并将其通过网络发送到远程设备。命令可以包括读取或写入某个寄存器或保持寄存器的数值。远程设备接收命令后,执行相应的操作,并将结果返回给发送方。 对于接收数据,程序可以监听网络上的数据包,并解析其中的Modbus响应命令。响应命令包括设备返回的数据值或执行结果。程序可以解析这些数据,并根据需要进行处理或显示。 西门子Modbus TCP通讯示例程序通常还包括错误处理和异常情况的处理。如果发送命令失败或收到错误的响应,程序需要进行适当的处理,并采取相应的措施,如重新发送命令或显示错误信息。 总之,西门子Modbus TCP通讯示例程序是一种用于实现设备间通信程序,通过网络传输数据和命令,实现设备的读写和控制功能。它可以帮助开发人员了解和应用Modbus TCP协议,实现设备间的数据交换和通信。 ### 回答2: 西门子模拟TCP通讯协议示例程序是用于将西门子设备与其他设备进行通讯示例程序,通过Modbus TCP协议实现数据的传输和控制。 在这个示例程序中,首先需要确保网络连接正常,然后通过编程语言(如Java、C++、Python等)创建一个TCP套接字,使用IP地址和端口号连接到西门子设备。连接成功后,程序将发送Modbus指令(如读取寄存器、写入寄存器)到设备,设备接收到指令后执行相应的操作并返回结果。 示例程序中,我们可以通过编码来实现各种功能,如读写寄存器、读写线圈等。可以根据需要自定义读取或写入的地址和数据,并根据西门子设备的通讯协议进行响应的数据处理操作。 示例程序还可以结合界面编程,通过在界面上添加相应的按钮和输入框,实现用户与设备之间的交互。例如,当按下读取按钮时,程序将向设备发送读取指令并显示结果;当写入按钮按下时,程序将获取输入框中的数据并发送写入指令至设备。 总之,西门子Modbus TCP通讯示例程序是一种将西门子设备与其他设备进行通讯示例程序,它可以实现通过TCP套接字连接到设备并发送相应的Modbus指令,实现设备的数据传输和控制。可以根据自己的实际需求进行定制和扩展。 ### 回答3: 西门子Modbus_TCP通讯示例程序是一种基于Modbus协议的通讯方式,它用于实现设备之间的数据传输和通信。 该示例程序使用了TCP/IP协议作为通信协议,并基于Modbus协议进行数据交换。Modbus是一种开放的通信协议,用于在不同设备之间进行数据的读取和写入。 在使用西门子Modbus_TCP通讯示例程序时,需要首先配置设备的网络参数,同时保证设备之间的网络连接正常。然后,通过编写程序,实现设备之间的数据交换和通信。 在示例程序中,需要指定通信的目标设备地址和端口,并定义所要执行的Modbus功能码。功能码包括读取保持寄存器、读取输入寄存器、写入单个保持寄存器等操作。 示例程序的实现基本步骤如下: 1. 配置设备的网络参数,并保证设备之间的网络连接正常。 2. 初始化Modbus通信参数,包括目标设备地址、端口和Modbus功能码。 3. 建立TCP连接并发送Modbus请求命令。 4. 接收设备的响应数据,并进行解析和处理。 5. 关闭TCP连接,释放资源。 通过以上步骤,可以实现设备之间的数据交换和通信示例程序中提供了各种不同的Modbus功能码的操作示例,并可根据需要进行修改和扩展。 总而言之,西门子Modbus_TCP通讯示例程序是基于Modbus协议的一种通信方式,通过编写程序实现设备之间的数据交换和通信。它极大地方便了设备之间的数据传输和通信,提高了设备的互联性和自动化水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值