📄 net_tcp.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 + -