当前位置: 首页 > news >正文

手机型网站余姚市建设局网站

手机型网站,余姚市建设局网站,天津 网站设计制作公司,天津响应式网站1、概述连接服务器、向服务器发数据、接受服务器数据&#xff0c;代码你能编写出来么&#xff1f;2、详见代码&#xff08;vs编译&#xff09;main.cpp#include "NetSocket.h" #include <string> #include <iostream> using namespace std; int main() {…

1、概述

连接服务器、向服务器发数据、接受服务器数据,代码你能编写出来么?

2、详见代码(vs编译)

main.cpp

#include "NetSocket.h"
#include <string>
#include <iostream>
using namespace std;
int main() {// 连接服务器const char* ip = "192.168.202.223";int port = 8082;int connect_timeout = 10;bool flag = NetSocket::GetInstance().ConnectServer(ip, port, connect_timeout);cout << "connect flag:" << flag << endl;// 发送数据std::string sendData = "sendData 123456";int send_timeout = 10;flag = NetSocket::GetInstance().SendData(sendData.c_str(), sendData.length(), send_timeout);cout << "send data flag:" << flag << endl;// 收数据char recvbuf[512] = { 0 };// recvBytes实际项目中应该是包头或包体的长度int recvBytes = sendData.length();int recv_timeout = 10;flag = NetSocket::GetInstance().RecvData(recvbuf, recvBytes, recv_timeout);cout << "recv data flag:" << flag << endl;cout << "recv data:" << recvbuf << endl;return 0;
}

NetSocket.h

#ifndef NET_SOCKET_H_
#define NET_SOCKET_H_ 1class NetSocket
{
private:NetSocket();~NetSocket();NetSocket(const NetSocket& s) = delete;NetSocket& operator=(const NetSocket& s) = delete;public:static NetSocket& GetInstance();// 连接服务器bool ConnectServer(const char* ip, const int port, int timeout = 10);bool SendData(const char* buf, int bufLen, int timeout = 30);bool RecvData(char* buf, int bufLen, int timeout = 30);void CloseConnect();private:bool InitSocket();void UnInitSocket();int m_socket;bool m_bConnected;
};#endif

NetSocket.cpp


#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <Winsock2.h>
#include "NetSocket.h"
#include <ctime>
#include <string>
#pragma comment(lib, "Ws2_32.lib")NetSocket::NetSocket() :m_socket(INVALID_SOCKET),m_bConnected(false)
{InitSocket();
}NetSocket::~NetSocket()
{UnInitSocket();
}NetSocket& NetSocket::GetInstance()
{static NetSocket s;return s;
}bool NetSocket::ConnectServer(const char* ip, const int port, int timeout)
{m_socket = socket(AF_INET, SOCK_STREAM, 0);if (m_socket == INVALID_SOCKET){return false;}// 设置NoDelaylong noDelay = 1;setsockopt(m_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&noDelay, sizeof(long));// 设置非阻塞 1非阻塞 0阻塞u_long mode = 1;int ret = ::ioctlsocket(m_socket, FIONBIO, &mode);if (ret != 0){return false;}struct sockaddr_in addrSrv = { 0 };addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(u_short(port));addrSrv.sin_addr.s_addr = inet_addr(ip);ret = connect(m_socket, (sockaddr*)&addrSrv, sizeof(addrSrv));if (ret == 0){m_bConnected = true;return true;}else if (ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK){return false;}// 用io复用函数select,判断sockfd状态int maxfd = m_socket + 1;fd_set write_fd;FD_ZERO(&write_fd);FD_SET(m_socket, &write_fd);// 1、null:没有事件永久阻塞// 2、毫秒、微秒都设置0:扫描下是否有信号,都立刻返回// 3、毫秒、微秒大于0:等待指定时间超时3struct timeval tv = {timeout, 0};int activity = ::select(maxfd, NULL, &write_fd, NULL, &tv);if (activity <= 0){return false;}if (FD_ISSET(m_socket, &write_fd)){m_bConnected = true;return true;}return false;
}bool NetSocket::SendData(const char* buf, int bufLen, int timeout)
{if (!m_bConnected){return false;}int ret = 0;int nSendBytes = 0;auto start_time = ::time(nullptr);while (true){ret = send(m_socket, buf + nSendBytes, bufLen - nSendBytes, 0);if (ret == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK){// tcp窗口太小发不出去,并且没有超时,继续等待if (::time(nullptr) - start_time < timeout){// 等待1毫秒,看看内核缓冲区是否有空间::Sleep(1);continue;}else{CloseConnect();return false;}}else if (ret < 1){// 出错了, 关闭连接CloseConnect();return false;}nSendBytes += ret;if (nSendBytes >= bufLen){return true;}// 防止CPU空转::Sleep(1);}return false;
}bool NetSocket::RecvData(char* buf, int bufLen, int timeout)
{if (!m_bConnected){return false;}int ret = 0;int nRecvBytes = 0;auto start_time = ::time(nullptr);while (true){ret = recv(m_socket, buf + nRecvBytes, bufLen - nRecvBytes, 0);if (ret == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK){if (::time(nullptr) - start_time < timeout){::Sleep(1);continue;}else{// 出错了,关闭连接CloseConnect();return false;}}else if (ret < 1){// 对端关闭连接了CloseConnect();return false;}nRecvBytes += ret;if (nRecvBytes >= bufLen){return true;}}return false;
}void NetSocket::CloseConnect()
{if (m_socket == INVALID_SOCKET){return;}closesocket(m_socket);m_socket = INVALID_SOCKET;m_bConnected = false;
}bool NetSocket::InitSocket()
{WORD wVersionRequested = MAKEWORD(2, 2);WSADATA wsaData;int nErrorID = ::WSAStartup(wVersionRequested, &wsaData);if (nErrorID != 0)return FALSE;if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2){UnInitSocket();return FALSE;}return TRUE;
}void NetSocket::UnInitSocket()
{CloseConnect();::WSACleanup();
}

学习链接:https://github.com/0voice

http://www.dtcms.com/a/547185.html

相关文章:

  • 企业网站服务门户如何做一个企业的网站
  • 郑州网站开发公su域名注册
  • 快递建站收费标准免费的那种软件
  • 写方案的网站关wordpress更新
  • 申请号的网站懒人手机网站模板
  • 商务网站设计网站模板 帝国 phpcms
  • kuake自助建站系统官网好的网站设计模板
  • 网站建设 目的 意义 政策宣城做w网站的公司
  • 社交网站开发背景单页设计图片模板
  • 优化网站价格小程序app怎么做
  • php做网站和小程序很好网站的ftp账号和密码
  • 驻马店营销型网站建设优化推广广告制作公司起名
  • 广东最大的线上购物平台seo的名词解释
  • 倒v是网站设置的还是作家自己wordpress加载模板
  • 商城县建设局网站建设网站技术方案
  • 东莞网站建设完整投资公司招聘
  • 新手做网站做那个深圳网站设计电话
  • 东莞做商城网站建设图片设计软件app
  • 什么网站可以做外国生意国内网页设计欣赏
  • 中国国际空间站拒绝十个国家wordpress能用多个云存储么
  • 网站建设及优化 赣icp网站的网页设计毕业设计
  • 安庆网站建设专业制移动互联网开发课程设计报告
  • 江苏省建设人才网站广州设计公司前十名
  • 廊坊安次区网站建设公司赤峰市建设局网站
  • 伴奏在线制作网站网络服务器搭建配置与管理 下载
  • 网站开发软件中文版开发商城微信小程序
  • js 做网站找网站建设需要问什么
  • 360优化大师官方网站网站怎么自己做服务器
  • 做网站个体户执照吉林省吉林市龙潭区
  • 平方数和分组