UDP通信

本文提供了使用Winsock实现UDP服务器及客户端的示例代码。包括服务器端口绑定、接收消息和客户端发送消息的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UDP服务器代码如下:

#include "stdafx.h"
#include <winsock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
#define  PORT 9000  //对外服务端口

using namespace  std;

int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsaData={0};
	int iResutl = WSAStartup(0x0202,&wsaData);

	SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);
	if(sock == INVALID_SOCKET)
	{
		cout <<"创建套接字失败!" <<endl;
	}

	sockaddr_in sa     ={AF_INET};
	sa.sin_port        = htons(PORT);//开放给外部的端口
	sa.sin_addr.s_addr = 0;          //本机地址
	int n = bind(sock,(sockaddr*)&sa,sizeof(sa));
	if(SOCKET_ERROR == n)
	{
		cout << "端口绑定失败!"<<endl;
	}

	cout << "UDP服务器启动" <<endl;
	char buff[1000]={0};

	sockaddr_in form;
	int len = sizeof(form);
	int ret = 0;
	while(ret =recvfrom(sock,buff,1000,0,(sockaddr*)&form,&len))
	{
		cout << "IP地址来自:" << inet_ntoa(form.sin_addr) <<"端口:"<< htons(form.sin_port) <<endl;
		cout << buff << endl;
		memset(buff,0,1000);
	}
	
	return 0;
}

UDP客户端代码如下:

#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define PORT 8050 //自己的端口

int _tmain(int argc, _TCHAR* argv[])
{
	//UDP客户端
	WSADATA wsaData={0};
	int iResult = WSAStartup(0x0202,&wsaData);

	SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);//UDP协议类型

	SOCKADDR_IN sa={AF_INET,htons(PORT)};
	int n = bind(sock,(sockaddr*)&sa,sizeof(sa));//绑定端口


	SOCKADDR_IN to={AF_INET};
	to.sin_port = htons(9000);                   //对方端口
	to.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //对方IP地址
	int a = sendto(sock,"hello",5,0,(sockaddr*)&to,sizeof(to));

}

用MFC中的CSocket写客户端代码如下:

// Client.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <afxwin.h>
#include <afxsock.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	//控制台中要加这一句,否则出错
	if(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0))
	{
		return FALSE;
	}

	AfxSocketInit();//初始化Socket库

	CSocket sock;
	BOOL ret = sock.Create(29081,SOCK_DGRAM);
    if(!ret)
	{
       cout << "Socket创建错误" << WSAGetLastError() <<endl;
	}
	
	char buff[1000]={"hello123"};
	sock.SendTo(buff,strlen(buff),9000,_T("127.0.0.1"));

	getchar();

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值