Windows socket UDP开发实例

开发环境:vc++6.0

windows socket UDP开发函数介绍:

 

int recvfrom(SOCKET s,char FAR * buf,int len,int flags,struct sockaddr FAR * from,int FAR * fromlen);

说明:
1 SOCKET s:套接字
2 char FAR* buf:接受数据缓冲区
3 int len:接受数据缓冲区大小
4 int flags:该参数影响recvfrom()的行为,有以下取值:
0:无特殊行为
MSG_PEEK:有用的数据被复制到接受缓冲区内,但没有从系统缓冲区中将其删除。
MSG_OOB:表示处理带外数据。
5 struct sockaddr FAR * from:该参数返回发送数据的主机地址
6 int FAR * fromlen:地址长度
7 成功返回接受数据字节数,失败则返回SOCKET_ERROR错误

 

 

int sendto(SOCKET s,const char FAR* buf,int len,int flags,const struct sockaddr FAR* to,int tolen);

说明:
1 SOCKET s:套接字
2 const char FAR* buf:发送数据缓冲区
3 int len:接受数据缓冲区大小
4 int flags:该参数影响sendto()的行为,有以下取值:
0:无特殊行为
MSG_DONTROUTE:传输层不要将数据路由出去
MSG_OOB:该数据应该被带外发送
5 const struct sockaddr FAR* to:接受数据主机的地址
6 int tolen:主机地址的大小

其他函数与TCP一致,请见:

 

http://blog.csdn.net/qq_24282081/article/details/55805436

开发实例:

客户端向服务器发送“MyUDP”,服务器接收到显示在屏幕上

 

//	Server

#include "stdafx.h"
#define BUF_SIZE 64
#include
int main(int argc, char* argv[])
{	
	WSADATA wsd;
	SOCKET	s;
	SOCKADDR_IN serAddr;
	char buf[BUF_SIZE];
	SOCKADDR ClientAddr;
	
	//初始化套接字动态库
	if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
	{
		printf("WSAStartup failed!\n");
		return 1;
	}
	
	//创建套接字
	s = socket(AF_INET,SOCK_DGRAM,0);
	if(s == INVALID_SOCKET)
	{
		printf("socket failed!\n");
		WSACleanup();
		return 1;
	}
	
	//绑定套接字
	serAddr.sin_family = AF_INET;
	serAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	serAddr.sin_port = htons((short)5000);

	if(bind(s,(SOCKADDR *)&serAddr,sizeof(serAddr)) == SOCKET_ERROR)
	{
		printf("bind() failed: %d \n",WSAGetLastError());
		closesocket(s);
		WSACleanup();
		return -1;
	}

	//接受并显示数据
	int nClientLen = sizeof(ClientAddr);
	ZeroMemory(buf,BUF_SIZE);
	if(recvfrom(s,buf,BUF_SIZE,0,(SOCKADDR *)&ClientAddr,&nClientLen) == SOCKET_ERROR)
	{
		printf("recvfrom failed: %d \n",WSAGetLastError());
		closesocket(s);
		WSACleanup();
		return -1;
	}

	printf("%s \n",buf);

	cin.get();
	return 0;
}

 

 

//	Client

#include "stdafx.h"
#define BUF_SIZE 64
#include
int main(int argc, char* argv[])
{
	WSADATA			wsd;
	SOCKET			s;
	SOCKADDR_IN		serAddr;
	char			buf[BUF_SIZE];

	//初始化套接字
	if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
	{
		printf("WSAStartup failed! \n");
		return -1;
	}

	//创建套接字
	s = socket(AF_INET,SOCK_DGRAM,0);
	if(s == INVALID_SOCKET)
	{
		printf("socket failed : %d \n",WSAGetLastError());
		return -1;
	}

	//发送数据
	ZeroMemory(buf,BUF_SIZE);
	strcpy(buf,"MyUDP");

	serAddr.sin_family = AF_INET;
	serAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.171");
	serAddr.sin_port = htons((short)5000);
	int nServAddLen = sizeof(serAddr);

	if(sendto(s,buf,BUF_SIZE,0,(SOCKADDR*)&serAddr,nServAddLen) == SOCKET_ERROR)
	{
		printf("sendto failed: %d \n",WSAGetLastError());
		closesocket(s);
		WSACleanup();
		return 1;
	}

	printf("%s",buf);

	closesocket(s);
	WSACleanup();
	cin.get();
	return 0;
}

 

 

 

 

 

 

 

你可能感兴趣的:(vc++/c++/mfc学习)