网络编程C实现不定长传输数据与文本两个功能

服务端与客户端进行通信,服务端实现不定长接收数据与文本。

recvvl是不定长处理数据

recv是定长处理数据

recvvlfile是不定长处理文本

recvfile是定长处理文本

服务端接收数据时,若遇见“#”代表接收结束,本次代码对文本名字进行单个字符的接收,若遇见“#”也表示接收文件名结束。

服务端:

#include "stdio.h"
//#include "windows.h"
#include "ws2tcpip.h"
#include "winsock2.h"

#pragma comment(lib,"Ws2_32.lib")
#define default_port "4444"

//定长数据
int recvn(SOCKET s,char *recvbuf,unsigned int fixedlen)
{
    int iResult;
    int cnt;
    cnt = fixedlen;
    int count=0;
    while(cnt>0)
    {
        iResult = recv(s,recvbuf,cnt,0);
        count++;
        if(iResult>0)
        {
            printf("%d--接收到的字节数:%d\n",count,iResult);
            for(int i=0;i<iResult;i++)
                if( recvbuf[iResult-1] != '#')
                    printf("%c",recvbuf[i]);
                else
                    exit(0);
            printf("\n");
            recvbuf += iResult;
            cnt -= iResult;
        }
        else if(iResult==0)
        {
            //printf("连接关闭5\n");
            return fixedlen-cnt;
        }
        else
        {
            printf("连接发生错误1\n");
            return -1;
        }

    }
    return fixedlen;
}

//recvnfile
int recvnfile(SOCKET s,char *recvbuf,unsigned int fixedlen,FILE *fp)
{
    int iResult;
    int cnt;
    cnt = fixedlen;
    int count=0;
    while(cnt>0)
    {
        iResult = recv(s,recvbuf,cnt,0);
        count++;
        if(iResult>0)
        {
            fwrite(recvbuf,sizeof(char),iResult,fp);
            recvbuf += iResult;
            cnt -= iResult;
        }
        else if(iResult==0)
        {
            //printf("连接关闭5\n");
            return fixedlen-cnt;
        }
        else
        {
            printf("连接发生错误1\n");
            return -1;
        }

    }
    return fixedlen;
}

//变长数据接收
int recvvl(SOCKET s,char *recvbuf, unsigned int recvbuflen)
{
    int iResult;//存储单次recv操作的返回值
    unsigned int reclen; //用于存储消息首部存储的长度信息
    iResult = recvn(s,(char *)&reclen,sizeof(unsigned int));
    if(iResult != sizeof(unsigned int))
    {
        if(iResult == -1)
        {
            printf("接收发生错误2");
            return -1;
        }
        else
        {
            printf("连接关闭4");
            r

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: DNSC(Domain Name System Controller)是一种用于控制和管理域名系统(DNS)的编程语言。在网络编程中,通过实现DNSC语言,可以实现DNS服务器的自定义配置及管理。 首先,DNSC语言需要支持基本的DNS解析功能。通过编程实现DNSC语言,可以对域名进行解析,将域名转换为相应的IP地址,从而使得网页或者其他网络资源能够在浏览器中正确打开。 其次,DNSC语言还应该支持DNS记录的管理功能。通过编程实现DNSC语言,可以添加、删除、修改DNS记录,包括A记录、CNAME记录、MX记录等。这样,用户可以根据自身需求,动态地管理和控制自己的DNS配置。 此外,DNSC语言还应该支持负载均衡和故障转移功能。通过编程实现DNSC语言,可以根据服务器的负载情况动态分配请求,从而实现负载均衡。当某个服务器出现故障时,DNSC语言可以自动将请求转发到备用服务器,实现故障转移,确保网络的稳定性和可靠性。 最后,DNSC语言还应该支持安全性控制。通过编程实现DNSC语言,可以实现用户名和密码的认证功能,限制非授权用户的访问。同时,还可以实现IP地址过滤功能,限制特定IP地址的访问,提高网络的安全性。 总之,通过网络编程实现DNSC语言,可以实现自定义的DNS控制和管理功能,提升网络资源的访问效率和安全性。 ### 回答2: DNS是域名系统(Domain Name System)的缩写,是一种将域名解析为IP地址的系统。网络编程可以实现DNSC语言(Domain Name System Compiler),这是一种编程语言,可以处理和操作DNS解析的过程。 网络编程可以通过使用Socket编程,实现DNSC语言功能Socket网络编程的基础,它提供了一种通信机制,可以在网络中的不同主机之间实现数据的传输和接收。 首先,需要编写一个DNSC语言解析模块,用来解析输入的域名。这个模块可以使用Socket来与DNS服务器通信,发送和接收DNS查询请求和响应。通过使用Socket编程,可以建立一个与DNS服务器的连接,并发送查询请求,然后解析和获取返回的信息。 其次,需要编写一个DNSC语言生成模块,用来生成DNS查询请求。这个模块可以接收用户输入的域名,然后将其封装成DNS查询请求,使用Socket发送给DNS服务器。 最后,还需要编写一个DNSC语言处理模块,用来处理DNS查询的结果。当接收到DNS服务器返回的响应时,这个模块可以解析和处理返回的信息,将域名解析为对应的IP地址,并将解析结果返回给用户。 总之,通过网络编程,可以实现DNSC语言实现域名解析的功能。这样,用户可以通过DNSC语言,将域名解析为对应的IP地址,实现网络连接和通信。 ### 回答3: 实现DNSC(Domain Name System Compiler)语言的网络编程可以通过以下步骤完成: 1. 网络连接:首先,需要建立一个与DNS服务器的网络连接。可以使用TCP或UDP协议进行连接,一般情况下,DNS服务器使用默认端口53。 2. 发送请求:使用网络连接发送DNS请求消息。DNSC语言中的命令可以包括查询指定域名的IP地址、查询域名的权威服务器等。将这些命令转换成DNS请求消息,并通过网络连接发送到DNS服务器。 3. 接收响应:等待DNS服务器的响应消息,并使用网络连接接收响应。响应消息包含DNS服务器返回的查询结果,可以是IP地址、权威服务器信息等。 4. 解析响应:对接收到的响应消息进行解析,以获取所需的信息。根据DNSC语言中的命令类型,可以解析出IP地址或权威服务器地址等信息。 5. 反馈结果:将获取到的结果反馈给用户,可以通过控制台输出、界面展示等方式呈现。 在实现DNSC语言网络编程过程中,需要熟悉DNS协议,并理解DNSC语言的命令和语法规则。同时,还需要使用相应的网络编程库或框架,如Python的socket库、Java的Socket类等,来实现与DNS服务器的网络连接和消息传输。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值