zoukankan      html  css  js  c++  java
  • Winsock网络编程笔记:基于UDP的Client

    每次写网络程序都必须编写代码载入和释放winsock库,为了以后方便使用,我们将封装一个CInitSock类来管理Winsock库:

    // initsock.h文件
     
    #include <winsock2.h>
    #pragma comment(lib, "WS2_32")    // 链接到WS2_32.lib
     
    class CInitSock        
    {
    public:
        CInitSock(BYTE minorVer = 2, BYTE majorVer = 2)
        {
            // 初始化WS2_32.dll
            WSADATA wsaData;
            WORD sockVersion = MAKEWORD(minorVer, majorVer);
            if(::WSAStartup(sockVersion, &wsaData) != 0)
            {
                exit(0);
            }
        }
        ~CInitSock()
        {    
            ::WSACleanup();    
        }
    };
    
    

    #include"../common/initsock.h"
    #include<iostream>
    #include<string>
    #include<cstring>
    using namespace std;
    
    CInitSock initSock;
    
    int main()
    {
    	SOCKET s = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    	if (s == INVALID_SOCKET)
    	{
    		cout << "创建socket失败!" << endl;
    		return 0;
    	}
    
    	sockaddr_in address;
    	address.sin_family = AF_INET;
    	address.sin_port = htons(5678);
    	address.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    
    	char sendMessage[1024];
    	while (true)
    	{
    		cout << "请输入你要发送的内容:";
    		cin >> sendMessage;
    		::sendto(s, sendMessage, strlen(sendMessage), 0, (sockaddr*)&address, sizeof(address));
    	}
    	::closesocket(s);
    
    	return 0;
    }

    部分函数详解: 

    sendto()

    SendTo是一个计算机函数,指向一指定目的地发送数据,sendto()适用于发送未建立连接的UDP数据包 (参数为SOCK_DGRAM)。

    定义函数

    int sendto ( socket s , const void * msg, int len, unsigned int flags, const  struct sockaddr * to , int tolen ) ;

    套接字  ,buff 待发送数据的缓冲区,size 缓冲区长度,Flags 调用方式标志位, 一般为0, 改变Flags,将会改变Sendto发送的形式,addr (可选)指针,指向目的套接字的地址,len addr所指地址的长度。

    函数说明

    sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内容,参数flags 一般设0,详细描述请参考send()。参数to用来指定欲传送的网络地址,结构sockaddr请参考bind()。参数tolen为sockaddr的结构长度。

    返回值

    成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。

  • 相关阅读:
    11.26
    数组
    JavaScript
    2018.11.26
    input标签
    HPH 函数
    jQuery
    19/1/3数组
    2018/12/26//循环体
    12/25
  • 原文地址:https://www.cnblogs.com/Romantic-Chopin/p/12451011.html
Copyright © 2011-2022 走看看