⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udpsender.cpp

📁 “网络安全技术实践与代码详解”实例代码
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#pragma  comment (lib, "ws2_32.lib")

#define MSG_SEND_BUFFER 2048 // 发送缓存的最大长度
int main(int argc, char **argv)
{
    WSADATA        wsd;
    SOCKET         send_s;
    char          *sendbuf = NULL;
    int            ret;
    SOCKADDR_IN    recv_addr;
	int port;
	int sendlen = MSG_SEND_BUFFER;

    if(argc != 3)
	{
		printf("usage : %s [destip] [port]\n",argv[0]);
		exit(1);
	}
	port=atoi(argv[2]);

    // 初始化Winsock库
    if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
    {
        printf("WSAStartup error!\n");
        exit(1);
    }

    // 创建UDP套接字
    send_s = socket(AF_INET, SOCK_DGRAM, 0);
    if (send_s == INVALID_SOCKET)
    {
        printf("socket() error; %d\n", WSAGetLastError());
        exit(1);
    }
	// 设置接收端地址结构
    recv_addr.sin_family = AF_INET;
    recv_addr.sin_port = htons((u_short)port);
    recv_addr.sin_addr.s_addr = inet_addr(argv[1]);

    // 分配发送缓存空间
    sendbuf = new char[MSG_SEND_BUFFER];
    memset(sendbuf, 0, MSG_SEND_BUFFER);
	// 开始发送消息
	printf("向主机 %s 的 %d 端口发送消息...\n",argv[1],port);
	while(1)
	{
		printf("请输入要发送的信息:");
		gets(sendbuf);
		ret = sendto(send_s, sendbuf, sendlen, 0, 
			(SOCKADDR *)&recv_addr, sizeof(recv_addr));
		if (ret == SOCKET_ERROR)
		{
			printf("sendto() error; %d\n", WSAGetLastError());
			break;
		}
		else if (ret == 0)
			break;
	}                         
    closesocket(send_s);

    delete sendbuf;
    WSACleanup();
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -