一个简单的服务器和客户端的心跳程序
2013-04-15 23:25
330 查看
程序是基于TCP的,只是为了测试,功能并不完善。
大多数的心跳都是UDP协议。当服务器端的数据和心跳在同一端口时,TCP协议很容易出现心跳被阻塞的情况。
服务器端代码:
View Code
大多数的心跳都是UDP协议。当服务器端的数据和心跳在同一端口时,TCP协议很容易出现心跳被阻塞的情况。
服务器端代码:
View Code
#include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> #include <iostream> #include <string.h> #include <cstdlib> #include <string> #include <pthread.h> using namespace std; const short SHAKE_PORT = 9526; const short CLIENT_PORT = 9527; const int MAX_CONN_NUM = 5; const string CLIENT_IP = "192.168.1.106"; const int MAX_DATA_LENGTH = 255; const int MSG_SHAKE_LENGTH = 20; struct ShakeHands { int iConnID; int iLength; //通信双方约定,iLength为20即为握手消息 int iSendID; int iReceiveID; char extend[4]; void SwapID() { int tmp; tmp = iSendID; iSendID = iReceiveID; iReceiveID = tmp; } }; void* ShakeHands(void* arg) { struct ShakeHands msg; msg.iConnID = 123; msg.iLength = sizeof(struct ShakeHands); msg.iSendID = 1; msg.iReceiveID = 2; int res; sockaddr_in* pTmp = (sockaddr_in*)arg; int shakefd = -1; while(1) { shakefd = socket(AF_INET, SOCK_STREAM, 0); cout << "Start to send shakehands" << endl; res = connect(shakefd, (sockaddr*)pTmp, sizeof(*pTmp)); if (-1 == res) { cerr << "connect failed" << std::endl; sleep(1); continue; } write(shakefd, &msg, msg.iLength); memset(&msg, 0, sizeof(struct ShakeHands)); read(shakefd, &msg, MAX_DATA_LENGTH); if (MSG_SHAKE_LENGTH == msg.iLength) { cout << "shake hands succeed" << endl; } sleep(5); } close(shakefd); pthread_exit(const_cast<char*>("exit")); } int main() { int sockfd = 0; int len = 0; struct sockaddr_in address; char ch[MAX_DATA_LENGTH] = "Hello Server!"; address.sin_family = AF_INET; address.sin_port = htons(CLIENT_PORT); address.sin_addr.s_addr = inet_addr("192.168.1.105"); len = sizeof(address); pthread_t m_thread; void* result; int res = pthread_create(&m_thread, NULL, ShakeHands, (void*)&address); if (-1 == res) { cerr << "thread create failed"; exit(EXIT_FAILURE); } //此处做主线程工作 res = pthread_join(m_thread, &result); if (0 != res) { cerr << "thread join failed"; exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }
相关文章推荐
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- 【UNP学习笔记】一个简单的服务器/客户端程序
- 一个简单的服务器与客户端程序
- 本程序说明了如何建立一个简单的可以接收UDP服务器数据的UDP客户端
- 一个简单的UDP程序—C++服务器和C# .NET客户端
- 【实验 1-2】编写一个简单的 UDP 服务器和 UDPP 客户端程序。程序均为控制台程序窗口。
- Python一个简单的通信程序(客户端 服务器)
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。
- TCP/TP编程 - 一个简单的Linux下C写的socket服务器客户端程序
- 使用jrtplib写的一个简单服务器和客户端程序
- 【实验 1-1】编写一个简单的 TCP 服务器和 TCP 客户端程序。程序均为控制台程序窗口。
- ACE+线程池实现一个简单的服务器+多客户端通信程序
- libevent实现的一个简单的服务器和客户端程序
- 用Java实现一个简单的服务器与客户端程序
- python2.7_1.14_编写一个简单的回显客户端/服务器应用
- Windows网络编程入门:简单的客户端和服务器通信程序调试
- Windows Socket 编程_ 简单的服务器/客户端程序
- 一个简单的可以接收TCP服务器数据的TCP客户端
- UNIX环境编程学习笔记-----编程实例------一个简单的服务器端和客户端程序
- 简单的网络通信程序,客户端发送hello,server 服务器反馈 ok UDP