⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_tcp.cpp

📁 实时监控
💻 CPP
字号:
#include "stdafx.h"
#include "net_tcp.h"

extern FILE *fppppp;
//extern CAudioBuffer m_paudbuf;
//FILE *m_file_sound;
//##ModelId=3F9A1D2201F7
net_tcp::net_tcp(): ip(0), h(NULL), r(NULL),type(0)
{

}

//##ModelId=3F9A1D2201F8
net_tcp::~net_tcp()
{
	destroy();
}

//##ModelId=3F9A1D220201
bool net_tcp::create(net_addr& na,int m_type)
{
	int err ;
	type = m_type;
	
	int timeout = 3;
	h = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
	err = bind(h, na, na.size());
	listen(5);

	TRACE("port: %d\n", na.port());

	FD_SET a;
	FD_ZERO(&a);
	FD_SET(h, &a);
	timeval tv = {5,0};
	
	err = select(0, &a, NULL, NULL, &tv);
	if(!err)
	{
		closesocket(h);
		h = NULL;
		return false;
	}

	int len = na.size();
	r = accept(h, na, &len);
/*
	net_addr remote;
	int size = remote.size();
	r = accept(h, remote, &size);

	int recv_buf_len = 32768*3;
	err = setsockopt(r, SOL_SOCKET, SO_RCVBUF, (char*)&recv_buf_len, sizeof(recv_buf_len));
*/
	thrd_start(THREAD_PRIORITY_NORMAL) ;

	return true;
}

//##ModelId=3F9A1D22020D
bool net_tcp::listen(int backlog)
{
	int err;
	err = ::listen(h, backlog);
	return err != SOCKET_ERROR;
}

/*
bool net_tcp::accept()
{
	int err;
	net_addr na;
	int size = na.size();
	err = ::accept(h, na, &size);
	return err != SOCKET_ERROR;
}
*/
//##ModelId=3F9A1D22020B
void net_tcp::destroy()
{
//	AfxMessageBox("tcp destroy");
	thrd_close(1000);

	if( h )
	{
		closesocket(h);
		h = NULL;
	}
	if( r )
	{
		closesocket(r);
		r = NULL;
	}
}

//##ModelId=3F9A1D2201DA
void net_tcp::got_something()
{
	int err = 0;
	byte buf[32768];
	err = recv(r, (char*)buf, 32768, 0);
	if( err == SOCKET_ERROR )
	{
		destroy();
		return;
	}
	on_recv(buf, err);
}

void net_tcp::send_something()
{
	int err = 0;
	unsigned char buf[120];

	int length = m_send_buf.GetAudioData(buf,120);
	
	if(length >0)
	{
	  err = send(r, (char*)buf, 120, 0);
	  if( err == SOCKET_ERROR ) return;
	}
	else Sleep(1);
	
}

//##ModelId=3F9A1D2201D9
void net_tcp::entry()
{
	FD_SET a;
	int err = 0;
	timeval tv = {0,200000};

	FD_ZERO(&a);

	while(1)
	{
		if( check_exit() )
			break;

		if( !r )
		{
			Sleep(1);
			continue;
		}

        if(type==2)
		{
		    send_something();
			continue;
		}

		FD_SET(r, &a);
		err = select(0, &a, NULL, NULL, &tv);
		if( err > 0 )
		{
			if(type==1)
				got_something();
		}
//		Sleep(1);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -