zoukankan      html  css  js  c++  java
  • UDP 通讯

    // 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;
    }
    
    
    
    
  • 相关阅读:
    正则表达式记录
    XMLHttpRequest(Ajax)不能设置自定义的Referer
    删除右键菜单上的Adobe Drive CS4,Win7上也没有问题
    A HOWTO on Optimizing PHP(如何优化PHP的一篇文章)
    PHP XML To Array,将XML转换为数组
    让图片在高度确定的块元素中垂直居中
    (转)2011年,還是微軟IE的天下~網頁設計師哭泣吧!
    产生类似GUID的唯一ID
    转:编写跨浏览器兼容的 CSS 代码的金科玉律
    array_intersect 比 array_diff 快
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2978331.html
Copyright © 2011-2022 走看看