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
    评论
在C语言中,可以使用socket和sendto函数来实现UDP发送功能。具体的发送函数可以根据你的需求来编写,以下是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define SERVER_IP "127.0.0.1" // 服务器IP地址 #define SERVER_PORT 8888 // 服务器端口号 int main() { int sockfd; struct sockaddr_in server_addr; // 创建socket if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } // 设置服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); memset(server_addr.sin_zero, 0, sizeof(server_addr.sin_zero)); // 发送数据 char *message = "Hello, UDP!"; if (sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("sendto"); exit(1); } // 关闭socket close(sockfd); return 0; } ``` 上述代码中,首先创建了一个UDP socket,并设置服务器的IP地址和端口号。然后通过sendto函数将待发送的数据发送到服务器。最后关闭socket。 请注意,上述代码只是一个简单的示例,实际的发送函数可以根据具体的需求进行修改和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++socket(udp、tcp)常用基础函数笔记](https://blog.csdn.net/matrix_studio/article/details/127352149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [linux C++ UDP通信工具类](https://blog.csdn.net/qq_40778196/article/details/130263498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值