C++ UDP通信Demo

UDP监听端:

#include "stdafx.h"
#include<WINSOCK2.H>
#include<iostream>

#pragma comment(lib,"WS2_32.lib")
using namespace std;


WSADATA wsaData;//初始化
SOCKET RecvSocket;
sockaddr_in RecvAddr;//服务器地址
int Port=5525;//服务器监听地址
char RecvBuf[1024];//发送数据的缓冲区
int BufLen=1024;//缓冲区大小
sockaddr_in SenderAddr;
int SenderAddrSize;

void UDPRecieve()
{
	//调用Recvfrom函数在绑定的socket上接收数据
	
	recvfrom(RecvSocket,RecvBuf,BufLen,0,(SOCKADDR *)&SenderAddr,&SenderAddrSize);
	printf("receiving data=== %s\n",RecvBuf);

}

void CloseUDP()
{
	//关闭socket,结束接收数据
	printf("finished receiving,closing socket..\n");
	closesocket(RecvSocket);
	//释放资源,退出
	printf("Exiting.\n");
	WSACleanup();
}


int _tmain(int argc, _TCHAR* argv[])
{
	SenderAddrSize=sizeof(SenderAddr);
	//初始化Socket
	WSAStartup(MAKEWORD(2,2),&wsaData);
	//创建接收数据报的socket
	RecvSocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
	//将socket与制定端口和0.0.0.0绑定
	RecvAddr.sin_family=AF_INET;
	RecvAddr.sin_port=htons(Port);
	RecvAddr.sin_addr.s_addr=htonl(INADDR_ANY);
	bind(RecvSocket,(SOCKADDR *)&RecvAddr,sizeof(RecvAddr));

	while(1)
	{
		UDPRecieve();
	}

	return 0;
}

 

UDP发送端:

#include "StdAfx.h"
#include "UDPSend.h"


//#pragma comment(lib,"WS2_32.lib")

using namespace std;



WSADATA wsaData;//初始化
SOCKET SendSocket;
sockaddr_in RecvAddr;//服务器地址
int Port=5525;//服务器监听地址
char SendBuf[1024];//发送数据的缓冲区
int BufLen=1024;//缓冲区大小

UDPSend::UDPSend()
{

	//初始化Socket
	WSAStartup(MAKEWORD(2,2),&wsaData);
	//创建Socket对象
	SendSocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
	//设置服务器地址
	RecvAddr.sin_family=AF_INET;
	RecvAddr.sin_port=htons(Port);
	RecvAddr.sin_addr.s_addr=inet_addr("192.168.1.110");
	//向服务器发送数据报
	//printf("Sending a datagram to the receiver...\n");
	//sendto(SendSocket,SendBuf,BufLen,0,(SOCKADDR *)&RecvAddr,sizeof(RecvAddr));
	//发送完成,关闭Socket
	//printf("finished sending,close socket.\n");
	//closesocket(SendSocket);
	/*printf("Exting.\n");
	WSACleanup();*/
	/*return 0;	*/
}

void UDPSend::SendData(char* lpFrame,int length)
{
	//byte buffer[1024];
	printf("Sending data====%s\n",lpFrame);

	sendto(SendSocket,lpFrame,BufLen,0,(SOCKADDR *)&RecvAddr,sizeof(RecvAddr));
}

void UDPSend::Close()
{
	printf("finished sending,close socket.\n");
	closesocket(SendSocket);
	printf("Exting.\n");
	WSACleanup();
}
#include<WINSOCK2.H>

#include<iostream>

class UDPSend
{
public:
	UDPSend();
	~UDPSend();

	void SendData(char* lpFrame,int length);
	void Close();
};

发送端在主控制台调用如下:

UDPSend* udpsend=new UDPSend();

while (1)
{

string str;

getline(cin,str);

udpsend->SendData((char*)(str.data()),1024);

}

  • 4
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: TCP通信demo是指基于TCP协议实现的通信示例程序。TCP协议是一种可靠的、面向连接的传输层协议,它的主要特点是在通信双方建立连接后,可保证数据的完整性、有序性和可靠性,在数据传输过程中还可以进行流量控制和拥塞控制,因此在网络传输中得到广泛的应用。 在实现TCP通信demo的过程中,需要注意以下几个方面: 1.连接建立:在TCP协议中,连接的建立需要经过三次握手的过程,即发送SYN报文、收到SYN+ACK报文、发送ACK报文。因此,在demo中需要实现连接建立的过程,并保证建立成功后才能进行数据传输。 2.数据传输:在TCP协议中,数据是分段传输的,每个数据包都有一个序号和确认序号。因此,在demo中需要实现数据的分段传输和接收,并进行序号和确认序号的匹配。 3.流量控制和拥塞控制:在TCP协议中,为了避免网络拥塞导致数据传输的失败,需要进行流量控制和拥塞控制。在demo中可以实现简单的流量控制和拥塞控制,例如设置最大传输速度和传输窗口大小。 总之,TCP通信demo是一个重要的网络编程示例程序,它可以帮助我们了解TCP协议的工作原理和应用场景,提高我们的网络编程技能和调试能力。 ### 回答2: TCP通信是计算机网络中重要的传输层协议,用于在两个设备之间提供可靠的数据传输。编写一个TCP通信demo是帮助理解TCP协议及其应用的一种方式。以下是一份简单的TCP通信demo的说明: 该demo包含两个客户端和一个服务器端。客户端向服务器发送数据,服务器接收数据并返回响应。客户端与服务器之间通过一个连接在TCP协议下进行通信。客户端通过套接字socket()函数创建一个套接字,并使用connect()函数连接到服务器。服务器端也使用socket()函数创建套接字,并调用bind()函数绑定端口号,然后使用listen()函数开启监听模式。当客户端连接到服务器后,服务器端使用accept()函数接受连接请求,然后使用recv()函数接收客户端发送的数据,并使用send()函数发送响应。客户端通过send()函数发送数据,并使用recv()函数接收服务器端的响应。 在编写TCP通信demo时需要注意以下事项: 1. 客户端和服务器端需使用相同的协议族(如IPv4或IPv6)和协议类型(如TCP或UDP)。 2. 确定通信过程中所需的数据格式,并在客户端和服务器端之间使用相同的格式传输数据。 3. 需要注意TCP协议中的粘包问题,即多个数据包可能会被合并在一起,需要使用固定长度或特殊分隔符来区分数据包。 4. 在处理网络异常情况时,应考虑超时、连接失效等问题,并进行相应的异常处理。 通过编写TCP通信demo,可以更加深入理解TCP协议的工作原理和应用,加强网络编程的基本功。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值