您的位置:首页 > 理论基础 > 计算机网络

visual studio 中UDP 服务器端和tcp客户端示例

2016-05-18 17:52 393 查看
bool data_coll(const char* msg, char* err)

{

WSADATA wsd;

SOCKET s;

int nRet;

// 初始化套接字动态库

if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)

{

printf("WSAStartup failed !\n");

return 1;

}

// 创建套接字

s = socket(AF_INET,SOCK_DGRAM,0);

if(s == INVALID_SOCKET)

{

printf("socket() failed ,Error Code:%d\n",WSAGetLastError());

WSACleanup();

return 1;

}

SOCKET socketSrv = socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrSrv;

SOCKADDR_IN addrClient;

char buf[BUF_SIZE];

int len = sizeof(SOCKADDR);

// 设置服务器地址

ZeroMemory(buf,BUF_SIZE);

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

addrSrv.sin_family = AF_INET;

addrSrv.sin_port = htons(9999);

cout<<"begin to bind "<<endl;

// 绑定套接字

nRet = bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

if(SOCKET_ERROR == nRet)

{

printf("bind failed !\n");

closesocket(s);

WSACleanup();

return -1;

}

// 从客户端接收数据

nRet = recvfrom(socketSrv,buf,BUF_SIZE,0,(SOCKADDR*)&addrClient,&len);

if(SOCKET_ERROR == nRet)

{

printf("recvfrom failed !\n");

closesocket(s);

WSACleanup();

return -1;

}

// 打印来自客户端发送来的数据

printf("Recv From Client:%s\n",buf);int i;cin>> i;

// 向客户端发送数据

sendto(socketSrv,"UDP Hello World !",sizeof("UDP Hello World !"),0,(SOCKADDR*)

&addrClient,len);

closesocket(s);

WSACleanup();

return 0;

}

bool data_coll(const char* msg, char* err)

{

WSADATA Ws;

SOCKET ClientSocket;

struct sockaddr_in ServerAddr;

int Ret = 0;

int AddrLen = 0;

HANDLE hThread = NULL;

char SendBuffer[MAX_PATH];

//Init Windows Socket

if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )

{

cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;

return -1;

}

//Create Socket

ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if ( ClientSocket == INVALID_SOCKET )

{

cout<<"Create Socket Failed::"<<GetLastError()<<endl;

return -1;

}

ServerAddr.sin_family = AF_INET;

ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);

ServerAddr.sin_port = htons(PORT);

memset(ServerAddr.sin_zero, 0x00, 8);

Ret = connect(ClientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));

if ( Ret == SOCKET_ERROR )

{

while(1)

cout<<"Connect Error::"<<GetLastError()<<endl;

return -1;

}

while ( true )

{

cin.getline(SendBuffer, sizeof(SendBuffer));

Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0);

if ( Ret == SOCKET_ERROR )

{

cout<<"Send Info Error::"<<GetLastError()<<endl;

break;

}

}

closesocket(ClientSocket);

WSACleanup();

return true;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: