发送数据hello函数执行了两次。

AIGPTchina 2013-03-29 11:24:03

void CPosSysView::OnButton2()
{
char key[33]={0};
char scport[10]={0};
char dsp[1024];
char dspbuffer[1024]={0};
unsigned short usport;
bool handshavar=FALSE;


usport = atoi(scport);


WSADATA wsa_data;
SOCKET msg_soc = 0; /* 客户端 socket 句柄 */
struct sockaddr_in srv_addr; /* 客户端地址 */
unsigned short port = 3456;
int result = 0, ready, addr_len = sizeof(srv_addr);
u_long non_block = 1;
int retflag = FALSE;
char data_buf[2048*10];

char *ip_addr = "127.0.0.1";

fd_set read_all, read_set, write_all, *write_fds = NULL;
struct timeval timeval = { 5000, 0 };


WSAStartup(WINSOCK_VERSION, &wsa_data); /* 初始化 WinSock 资源 */
msg_soc = socket(AF_INET, SOCK_STREAM, 0);
result = ioctlsocket(msg_soc, FIONBIO, &non_block);

/* 设置 socket 集合 */
FD_ZERO(&read_all);
FD_ZERO(&write_all);
FD_SET(msg_soc, &read_all);

/* 填写要连接的服务器 */
srv_addr.sin_family = AF_INET;
srv_addr.sin_port = htons(port);
srv_addr.sin_addr.s_addr = inet_addr(ip_addr);


result = connect(msg_soc, (struct sockaddr *)&srv_addr, addr_len);
if (result == 0) /* 连接成功 */
{
write_fds = NULL;
}
else if (WSAGetLastError() == WSAEWOULDBLOCK)
{
write_fds = &write_all;
FD_SET(msg_soc, &write_all);
}
else
{
closesocket(msg_soc);
}

while (1)
{
/* 设置 socket 集合 */
FD_ZERO(&read_all);
FD_SET(msg_soc, &read_all);
read_set = read_all;
struct timeval timeval = {5000, 0 };
ready = select(0, &read_set, write_fds, NULL, &timeval);
if (ready <= 0) /* 出错或超时 */
{
break;
}

/* 连接成功的 socket 是可写的 */
if (write_fds && FD_ISSET(msg_soc, write_fds))
{
sock = msg_soc;
if(handshavar == false)
{
hello();//不知道为什么这个函数执行了两次? //break;
//write_fds = NULL;
}
else if(handshavar == true)
{
ticate();
retflag = true;
}
}

if (FD_ISSET(msg_soc, &read_set)) /* socket 有数据可以读 */
{
result = recv(msg_soc, data_buf, 8196, 0);
if (result > 0)
{
data_buf[result] = 0;
handshavar = true;
if (retflag == true)
{
break;
}
}
else
{
break;
}
}
}

closesocket(msg_soc);
WSACleanup();
//}

}



1、为什么这个函数执行了两次也就是发送数据两次 hello(); 我想执行一次发送数据然后再去接收数据。
...全文
46 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧