C++ UDP

#include "stdafx.h"
#include<stdio.h>
#include<tchar.h>
#include <iostream>
#include <WinSock2.h>
#include <Windows.h>
using namespace std;
 
 //UDP
#pragma comment(lib, "ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
	WSAData wsd;           //初始化信息
	SOCKET soSend;         //发送SOCKET
	int nRet = 0;
	//int i = 0;
	int dwSendSize = 0;
	SOCKADDR_IN siLocal;    //远程发送机地址和本机接收机地址
 
							//启动Winsock
	if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) {/*进行WinSocket的初始化,
												windows 初始化socket网络库,申请2,2的版本,windows socket编程必须先初始化。*/
		cout << "WSAStartup Error = " << WSAGetLastError() << endl;
		return 0;
	}
 
	//创建socket
 
	//AF_INET 协议族:决定了要用ipv4地址(32位的)与端口号(16位的)的组合
	//SOCK_DGRAM --  UDP类型,不保证数据接收的顺序,非可靠连接;
	soSend = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (soSend == SOCKET_ERROR) {
		cout << "socket Error = " << WSAGetLastError() << endl;
		return 1;
	}
 
	//设置端口号
	int nPort = 6666;
	siLocal.sin_family = AF_INET;
	siLocal.sin_port = htons(nPort);
	siLocal.sin_addr.s_addr = inet_addr("192.168.2.16");
	char string1[] = "123 hei hei hei";
 
	for (int i = 0; i < 30; i++) {
		//开始发送数据
		//发送数据到指定的IP地址和端口
		nRet = sendto(soSend, string1, strlen(string1), 0, (SOCKADDR*)&siLocal, sizeof(SOCKADDR));
		if (nRet == SOCKET_ERROR) {
			cout << "sendto Error " << WSAGetLastError() << endl;
			break;
		}
	}
	//关闭socket连接
	closesocket(soSend);
	//清理
	WSACleanup();
 
	return 0;
}

/*
//#include "stdafx.h"
#include<stdio.h>
#include<tchar.h>
#include <iostream>
#include <WinSock2.h>
#include <Windows.h>
using namespace std;
 
 
#pragma comment(lib, "ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])//_tmain,要加#include <tchar.h>才能用
{
	WSAData wsd;           //初始化信息
	SOCKET soRecv;              //接收SOCKET
	char * pszRecv = NULL; //接收数据的数据缓冲区指针
	int nRet = 0;
	//int i = 0;
	int dwSendSize = 0;
	SOCKADDR_IN siRemote, siLocal;    //远程发送机地址和本机接收机地址
 
	//select
	fd_set          fd_read;
	struct timeval  timeout;
	timeout.tv_sec = 5;
	timeout.tv_usec = 100;	//标准的Unix系统(BSC)的时间片是100毫秒
 
	//启动Winsock
	if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) {
		cout << "WSAStartup Error = " << WSAGetLastError() << endl;
		return 0;
	}
 
	//创建socket
	soRecv = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (soRecv == SOCKET_ERROR) {
		cout << "socket Error = " << WSAGetLastError() << endl;
		return 1;
	}
 
	//设置端口号
	int nPort = 5656;
	siLocal.sin_family = AF_INET;
	siLocal.sin_port = htons(nPort);
	siLocal.sin_addr.s_addr = inet_addr("192.168.1.180");
 
	//绑定本地地址到socket
	if (bind(soRecv, (SOCKADDR*)&siLocal, sizeof(siLocal)) == SOCKET_ERROR) {
		cout << "bind Error = " << WSAGetLastError() << endl;
		return 1;
	}
 
	//申请内存
	pszRecv = new char[4096];
	if (pszRecv == NULL) {
		cout << "pszRecv new char Error " << endl;
		return 0;
	}
 
	//for (int i = 0; i < 30; i++)
	while(1)
	{
		dwSendSize = sizeof(siRemote);
 
		//select处理
		FD_ZERO(&fd_read);
		FD_SET(soRecv, &fd_read);
		if (select(soRecv + 1, &fd_read, NULL, NULL, &timeout) > 0)
		{
			if (FD_ISSET(soRecv, &fd_read))
			{
				//开始接受数据
				nRet = recvfrom(soRecv, pszRecv, 4096, 0, (SOCKADDR*)&siRemote, &dwSendSize);
			}
		}
		if (nRet == SOCKET_ERROR) {
			cout << "recvfrom Error " << WSAGetLastError() << endl;
			break;
		}
		else if (nRet == 0) {
			break;
		}
		else {
			pszRecv[nRet] = '\0';
			cout << inet_ntoa(siRemote.sin_addr) << endl
				<< pszRecv << endl;
		}
 
	}
	//关闭socket连接
	closesocket(soRecv);
	delete[] pszRecv;
 
	//清理
	WSACleanup();
	system("pause");
	return 0;
}
*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值