📄 socket_sr.cpp
字号:
// Socket_SR.cpp: implementation of the Socket_SR class.
//
//////////////////////////////////////////////////////////////////////
#include "Socket_SR.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Socket_SR* Socket_SR::pinstance = NULL;// 初始化指针
Socket_SR::Socket_SR()
{
socket_init();
sockaddrlen=sizeof(struct sockaddr);
sendlen=0;
n=0;
}
Socket_SR::~Socket_SR()
{
}
/*
factory pattern, make sure there is only one object of this class
*/
Socket_SR* Socket_SR::get_instance ()
{
if (pinstance == NULL)
{
pinstance = new Socket_SR;
}
return pinstance;
}
/*
initial socket
*/
void Socket_SR::socket_init()
{
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&addrSor_in, sizeof(addrSor_in));
addrSor_in.sin_family = AF_INET;
addrSor_in.sin_addr.s_addr = htonl(INADDR_ANY);
addrSor_in.sin_port = htons(SERV_PORT);
if(bind(sockfd, (struct sockaddr *)&addrSor_in, sizeof(addrSor_in)) == -1)
{
perror("bind error");
exit(1);
}
}
/*
close socket
*/
void Socket_SR::socket_close()
{
}
/*
send packet
*/
int Socket_SR::send()
{
int slen=sendto(sockfd,sendBuf,sendlen,0,(struct sockaddr *)&addrDes_in,sockaddrlen);
}
/*
receove packet
*/
int Socket_SR::receive()
{
int i;
char* r;
while(1)
{
recvlen = recvfrom(sockfd, recvBuf, MAXLINE, 0,(struct sockaddr *)&addrSor_in, (socklen_t*)&sockaddrlen);
// cout<<"收到第"<<n<<"个数据包"<<endl;
r=recvBuf;
RUDP* rudp=(RUDP*)recvBuf;
// cout<<"序列号="<<rudp->packet_seq<<endl;
i=sizeof(RUDP);
/*
for(;i<recvlen;i++)
{
printf("receive[%d]=%c\n",i,recvBuf[i]);
}
*/
// n++;
break;
}
return recvlen;
}
/*
creat destination address
*/
void Socket_SR::create_des_address(char* addr_ip,int port)
{
addrDes_in.sin_family = AF_INET;
addrDes_in.sin_addr.s_addr = inet_addr(addr_ip);
addrDes_in.sin_port = htons(port);
}
/*
copy RUDP header and real data to buffer sendBuf
*/
void Socket_SR::app_rudp(RUDP& rudptemp,char* data, int length)
{
memcpy(sendBuf,(char*)&rudptemp,sizeof(RUDP));
memcpy(sendBuf+sizeof(RUDP),data,length);
sendlen=length+sizeof(RUDP);
}
/*
get the buffer address
*/
char* Socket_SR::get_recvBuf()
{
return recvBuf;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -