16,472
社区成员
发帖
与我相关
我的任务
分享
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();
//}
}