4,356
社区成员
发帖
与我相关
我的任务
分享
#define LOGIN 1
#define MSGPLEASEBURROW 21 ///TO SEVER 请求CLIENT2向这边打洞
#define MSGBURROWTOCLIENT 22 //接收此消息后到向C1方向打洞
#define MSGBURROWCOME 23 //接收到对方CLEINT发过来的打洞消息
#define MSGMSGFROMCLIENT 24 //接收到对方发过来的消息
#define MSGTOCLIENTINFOR 25 //接收来自服务器的保存有对方信息的MSG
struct MSG_ClientToServer{
int MSG_type;
char name[20];//远方主机名称
unsigned int pleaseId;
unsigned short pleasePort;
unsigned int toId;
unsigned short toPort;
char msg[128];//存储要发送的消息
};
sockaddr_in clientAddr;
memset(recvBuf,0,1024);//清空缓存
while(true){
if(SOCKET_ERROR==recvfrom(sserver,recvBuf,1024,0,(sockaddr*)&clientAddr,&sockaddr_len)){
int lastError=WSAGetLastError();
printf("recv error;%d",lastError);
}else{
printf("接收到消息!!!!IP:%s;Port:\n",inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port));
memset(&msg,0,sizeof(msg));//清空结构体
memcpy(&msg,recvBuf,sizeof(msg));//把接收到的信息转换成结构体
memset(tempBuf,0,1024);//清空缓存
struct MSG_ClientToServer tomsg;//定义要发送消息的结构体
switch(msg.MSG_type){
case 24://接收到对方的消息
{
printf("接收到对方发过来的消息:%s",msg.msg);
MSG_ClientToServer tomsg2;
tomsg2.MSG_type=MSGMSGFROMCLIENT;
string Smessage="最终发送的信息---发送过来了!!!!\n";
strcpy(tomsg2.msg,Smessage.c_str());
for(int j=0;j<10;j++){
if(SOCKET_ERROR ==sendto(sserver,sendbuffer,sizeof(tomsg2),0,(sockaddr*)&clientAddr,sockaddr_len)){
printf("发送打洞消息失败!");
}else{
printf("借接收到的消息-----向请求方发送打洞消息成功,对方IP:%s;PORT:%d\n",inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port));
}
}
break;
}
}//switch--end
}//else --end
}
memset(recvBuf,0,1024);
memset(tempBuf,0,1024);
sockaddr_in recvaddr;
while(true){
memset(recvBuf,0,1024);//接收前初始化了一下
if(SOCKET_ERROR==recvfrom(sserver,recvBuf,1024,0,(sockaddr*)&recvaddr,&sockaddr_len)){
int lastError=WSAGetLastError();
printf("recv error;%d",lastError);
}else{
printf("接收到对方的消息:---HAHA\n");
memset(&msg,0,sizeof(msg));//清空结构体
memcpy(&msg,recvBuf,sizeof(msg));//把接收到的信息转换成结构体
memset(tempBuf,0,1024);//清空缓存
struct MSG_ClientToServer tomsg;//定义要发送消息的结构体
printf("HERE!");
printf("typeID:%d 对方IP:%s,PORT:%d\n",msg.MSG_type,inet_ntoa(recvaddr.sin_addr),ntohs(recvaddr.sin_port));
switch(msg.MSG_type){
case 24://接收到对方的消息
printf("接收到对方发过来的消息:");
break;
case 25:
tomsg.MSG_type=MSGMSGFROMCLIENT;
string Smessage="借TYPE 25发过来的信息!!!!\n";
strcpy(tomsg.msg,Smessage.c_str());
char sendbuffer[1024]={0};//清空发送缓存,不清空的话可能导致接收时产生乱码,//或者如果本次发送的内容少于上次的话,snd_buf中会包含有上次的内容
memcpy(sendbuffer,&tomsg,sizeof(tomsg)); //结构体转换成字符串
if(SOCKET_ERROR==sendto(sserver,sendbuffer,sizeof(tomsg),0,(sockaddr*)&toClientAddr,sockaddr_len)){
printf("请求方打洞失败!");
}else{
printf("TYPE:25 向对方发送信息,对方IP:%s;PORT:%d\n",inet_ntoa(toClientAddr.sin_addr),ntohs(toClientAddr.sin_port));
}
break;
}//switch--end
}//--else--end
}//while--end