基于UDP的socket编程

UDP服务器代码

/*
* 基于udp的socket编程
*/

/*
* udp服务器端代码
*/

#include<winsock2.h>
#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<ws2tcpip.h>

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

using namespace std;

int main()
{
	WSADATA data;                           //定义结构体变量
	WORD w = MAKEWORD(2, 0);               //定义套接字版本
	::WSAStartup(w, &data);                //初始化套接字库
	SOCKET s;                              //定义套接字句柄
	s = ::socket(AF_INET, SOCK_DGRAM, 0);  //创建UDP套接字
	sockaddr_in addr;                      //套接字地址结构变量
	int n = sizeof(addr);                  //地址结构变量大小
	addr.sin_family = AF_INET;
	addr.sin_port = htons(75);
	addr.sin_addr.S_un.S_addr = INADDR_ANY;
	::bind(s, (sockaddr*)&addr, sizeof(addr));     //绑定套接字
	cout << "UDP服务器启动..." << endl;
	char buffer[10] = { 0 };
	sockaddr_in addr2;
	char sztext[] = "欢迎你\n";               //发送到客户端的数据

	char clientAddr[30];
	while (true)
	{
		//接受客户端的信息
		if (::recvfrom(s, buffer, 10, 0, (sockaddr*)&addr2, &n) != 0)
		{
			cout << "已经连接上" << inet_ntop(AF_INET, &addr2.sin_addr, clientAddr, 30) << endl;
			cout << buffer << endl;
			//发送数据到客户端
			::sendto(s, sztext, sizeof(sztext), 0, (sockaddr*)&addr2, n);
			break;
		}
	}

	::closesocket(s);
	::WSACleanup();

	if (getchar())
	{
		return 0;
	}
	else
	{
		::Sleep(100);
	}

}

  UDP客户端代码

/*
* UDP客户端代码
*/

#include<winsock2.h>
#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<ws2tcpip.h>

#pragma comment(lib, "WS2_32.lib")                  //显示连接套接字库

using namespace std;

int main()
{
	WSADATA data;
	WORD w = MAKEWORD(2, 0);
	::WSAStartup(w, &data);
	SOCKET s;
	s = ::socket(AF_INET, SOCK_DGRAM, 0);              //创建UDP套接字
	sockaddr_in addr, addr2;
	int n = sizeof(addr);
	char buff[10] = { 0 };
	addr.sin_family = AF_INET;
	addr.sin_port = htons(75);
	inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr.S_un.S_addr);
	cout << "UDP客户端已启动" << endl;
	char sztext[] = "你好\n";

	//发送信息
	if (::sendto(s,sztext,sizeof(sztext), 0, (sockaddr*)&addr, n)!=0)
	{
		::recvfrom(s, buff, 10, 0, (sockaddr*)&addr2, &n);
		cout << "服务器说:" << buff << endl;
		::closesocket(s);
		::WSACleanup();
	}

	if (getchar())
	{
		return 0;
	}
	else
	{
		::Sleep(100);
	}


}

  

posted on 2022-07-13 23:19  xcxfury001  阅读(99)  评论(0)    收藏  举报

导航