Windows tcp客户端程序 设置非阻塞

来源:互联网 发布:手机电销软件 编辑:程序博客网 时间:2024/06/07 17:59
Windows tcp client 非阻塞


// tcpclienttest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

//TCP client
//client send string to server
//Visual C++ 6.0
#include <windows.h>
#include <stdio.h>
//#include <winsock2.h>
//tcp头文件
#include <cstdlib>
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET soc;
SOCKADDR_IN serveraddr;
SOCKADDR_IN clientaddr;
int flags;
char buf[1024];
memset(buf,0,sizeof(buf));
//strcpy_s(buf,"testtest123");
WSADATA wsa;
WSAStartup(MAKEWORD(1,1),&wsa); //initial Ws2_32.dll by a process
if((soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 0) //create a tcp socket
{
printf("Create socket fail!\n");
return -1;
}

//printf("set socket:%d",ret);
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(9159);
serveraddr.sin_addr.S_un.S_addr = inet_addr("192.168.100.22");
//connect to server
printf("Try to connect...\n");
if(connect(soc, (SOCKADDR *)&serveraddr, sizeof(serveraddr)) != 0)
{
printf("Connect fail!\n");
getchar();
return -1;
}
//设置非阻塞
unsigned long ul=1;
int ret=ioctlsocket(soc,FIONBIO,(unsigned long *)&ul);//设置成非阻塞模式。

if(ret==SOCKET_ERROR)//设置失败。

{
printf("set fail\n");
}

printf("Connected success\n");
while(1)
{
//scanf_s("%s", buf);
//strcpy_s(buf,"123");
//send to server
//if(send(soc, buf, strlen(buf)+1, 0)<=0)
//{
// printf("Error!\n");
//}
if (recv(soc, buf, 1024, 0)<=0)
{
printf("RevFail\n");
}

printf("%s len:%d\n",buf,strlen(buf));
memset(buf,0,sizeof(buf));
//Sleep(1000);
Sleep(1000);
}
WSACleanup(); //clean up Ws2_32.dll
return 0;


附件为网络测试程序;可作为tcp客户端服务端,及udp服务器客户端。可以与之建立连接通信
0 0