3,881
社区成员
发帖
与我相关
我的任务
分享
#ifndef SENDER_H
#define SENDER_H
#include <wx/thread.h>
#include "package.h"
#include <string>
#ifdef WIN32
#include <winsock2.h>
#else
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#endif
#ifdef WIN32
typedef int socklen_t;
typedef int ssize_t;
#endif
#ifdef __LINUX__
typedef int SOCKET;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
#define FALSE 0
#define SOCKET_ERROR (-1)
#define INVALID_SOCKET (-1)
#define closesocket(_x) close(_x)
#endif
using namespace std;
class DMS_serverFrame;
class reader;
class sender : public wxThread
{
public:
sender(DMS_serverFrame* frame);
virtual ~sender();
virtual wxThread::ExitCode Entry();
protected:
void sendMsgEvent(string msg);
private:
void sendData(SOCKET sock);
void changeVolume(short *buf);
void sendEmptyPackage(SOCKET sock);
void sendDataPackage(SOCKET sock, package pack,int i);
int send_all(SOCKET sock, char* buf, int nByte);
void recv_all(SOCKET sock, char* buf,int nByte);
DMS_serverFrame *m_pframe;
reader * prd;
SOCKET slisten;
sockaddr_in addr;
socklen_t addr_len;
};
#endif // SENDER_H
#include "sender.h"
#include "reader.h"
#include "../DMS_serverMain.h"
#include <sstream>
/** @brief sender
*
* @todo: document this function
*/
sender::sender(DMS_serverFrame* frame)
{
int rval;
this->m_pframe = frame;
stringstream ss;
#ifdef WIN32
WSADATA wsadata;
if (WSAStartup(MAKEWORD(1,1), &wsadata) == SOCKET_ERROR)
{
this->sendMsgEvent(string("Error creating socket.\n"));
}
#endif
slisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (slisten==INVALID_SOCKET)
{
this->sendMsgEvent(string("socket() failed!\n"));
}
else
{
this->sendMsgEvent(string("socket() success!\n"));
#ifdef __LINUX__
bzero(&addr, sizeof(addr));
#endif
addr.sin_family = AF_INET;
addr.sin_port = htons(1000);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
//bzero(&(addr.sin_zero), 8);
addr_len = sizeof(addr);
rval = bind(slisten, (sockaddr *)&addr, addr_len);
if (rval == SOCKET_ERROR)
{
this->sendMsgEvent(string("Failed bind()!\n"));
ss << errno << endl;
this->sendMsgEvent(ss.str());
}
else
{
this->sendMsgEvent(string("bind() success!\n"));
rval = listen(slisten, 5);
if (rval == SOCKET_ERROR)
{
this->sendMsgEvent(string("Failed listen()!\n"));
}
else
{
this->sendMsgEvent(string("listen() success!\n"));
}
}
}
};
其他就不贴了。
/* Allows binding to TCP/UDP sockets below 1024 */
/* Allows binding to ATM VCIs below 32 */
#define CAP_NET_BIND_SERVICE 10