UDP 通讯

来源:互联网 发布:卓睿安软件免费下载 编辑:程序博客网 时间:2024/05/08 08:38
// Udp_20130322.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <WinSock2.h>#pragma comment(lib, "WS2_32.lib")int _tmain(int argc, _TCHAR* argv[]){CHAR szBuffer[100] = {"Hello UDP!"};WSADATA wsaData;SOCKET udpSocket;SOCKADDR_IN SendAddr;SOCKADDR_IN RecvAddr;int iAddrLen = 0;int iErrorCode = 0;INT nNetTimeout = 1000*10;/* * 初始化SOCKET */    if (0 != WSAStartup(MAKEWORD(2,2), &wsaData)) {WSACleanup();return 0;}/* * 创建用于发送数据的SOCKET */udpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (INVALID_SOCKET == udpSocket) {closesocket(udpSocket);WSACleanup();return 0;}/* * 接收超时  */iErrorCode = setsockopt(udpSocket, SOL_SOCKET, SO_RCVTIMEO, (const char *)&nNetTimeout, sizeof(INT));if (SOCKET_ERROR == iErrorCode) {closesocket(udpSocket);WSACleanup();return 0;}/* * 绑定到自己的端口 */RecvAddr.sin_family = AF_INET;RecvAddr.sin_port = htons(4000);RecvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);iAddrLen = sizeof(RecvAddr);    iErrorCode = bind(udpSocket, (SOCKADDR*)&RecvAddr, iAddrLen);/* * 设置要发送的IP地址及端口号 * 备注:如果在同一台机器上做测试时,自己的端口与服务器的端口不可以重复; * 如果重复会有一段打开端口失败。 */SendAddr.sin_family = AF_INET;SendAddr.sin_port = htons(4000);SendAddr.sin_addr.S_un.S_addr = inet_addr("172.16.0.193");/* * 发送请求,传入带有对方的地址信息的结构体 */    iErrorCode = sendto(udpSocket, szBuffer, strlen(szBuffer)+1, 0, (SOCKADDR*)&SendAddr, sizeof(SendAddr));if (SOCKET_ERROR == iErrorCode) {closesocket(udpSocket);WSACleanup();return 0;}/* * 接收请求,传入带有本地端口信息的结构体 */iErrorCode = recvfrom(udpSocket, szBuffer, 100, 0, (SOCKADDR*)&RecvAddr, &iAddrLen);if (SOCKET_ERROR == iErrorCode) {closesocket(udpSocket);WSACleanup();return 0;}printf(szBuffer);getchar();closesocket(udpSocket);WSACleanup();return 0;}