#include <iostream>
#include "Send.h"
using namespace std;
Send::Send(void) {
m_socket = INVALID_SOCKET; WSAData ws; //每个Winsock程序必须使用WSAStartup载入合适的Winsock动态链接库,如果载入失败,WSAStartup将返回SOCKET_ERROR,这个错误就是WSANOTINITIALISED if (WSAStartup(MAKEWORD(1,1),&ws)!=0) { cout<<"WSAStartup failed! Error: "<<WSAGetLastError()<<endl; }
讯享网
}
Send::~Send(void) {
讯享网WSACleanup();
}
bool Send::InitSocket(const string strIPAddress,const string strPort) {
//创建套接字,ipv4,报文,udp协议 m_socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); //创建socket失败 if (INVALID_SOCKET == m_socket) { cout<<"failed to create socket"<<endl; return false; } //初始化sock地址 InitSockAddress(strIPAddress,strPort); // 绑定 if (bind (m_socket, (struct sockaddr FAR *) &m_sockLocalAddress, sizeof (m_sockLocalAddress)) == SOCKET_ERROR) { //报错 cout<<"Binding socket failed! Error: "<<WSAGetLastError()<<endl; closesocket (m_socket); return false; } int iOptVal=64; //1秒 // 设置组播存活时间 if (setsockopt (m_socket, IPPROTO_IP, 3, (char FAR *)&iOptVal, sizeof (int)) == SOCKET_ERROR) { //报错 cout<<"setsockopt failed! Error:"<<WSAGetLastError()<<endl; closesocket (m_socket); return false; } return true;
}
void Send::CleanSocket() {
讯享网shutdown(m_socket,0x01); closesocket(m_socket);
} bool Send::SendStringData(const string strMessage) {
if (sendto (m_socket, (char *)&strMessage, sizeof(strMessage), 0, (struct sockaddr FAR *) &m_sockDesAddress, sizeof (m_sockDesAddress)) == SOCKET_ERROR) { //报错 cout<<"sendto failed! Error: %d"<<WSAGetLastError ()<<endl; closesocket (m_socket); return false; } else { return true; }
}
bool Send::SendStructeData(const Person person) {
讯享网if (sendto (m_socket, (char *)&person, sizeof(person), 0, (struct sockaddr FAR *) &m_sockDesAddress, sizeof (m_sockDesAddress)) == SOCKET_ERROR) { //报错 cout<<"sendto failed! Error: %d"<<WSAGetLastError ()<<endl; closesocket (m_socket); return false; } else { return true; }
} void Send::InitSockAddress(const string strIPAddress,const string strPort) {
//本地sock地址设置 m_sockLocalAddress.sin_family = AF_INET; //ipv4地址类型 m_sockLocalAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY); m_sockLocalAddress.sin_port = htons(0); memset(m_sockLocalAddress.sin_zero,0,8); //目的sock地址设置 //IPv4版本 m_sockDesAddress.sin_family = AF_INET; //端口 m_sockDesAddress.sin_port = htons (atol(strPort.c_str())); //地址 m_sockDesAddress.sin_addr.s_addr = inet_addr (strIPAddress.c_str());
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170505.html