在C语言中send buff的用法?
发布网友
发布时间:2022-04-30 05:00
我来回答
共5个回答
热心网友
时间:2023-10-14 19:22
C语言中的标准库中是没有Send函数的。
从名称来看应该是自定义的函数。具体实现的功能、参数及调用的要求,需要在阅读函数之后才能得到结论。
当然如果是C++的话,在Tcp中是具备Send函数的。具体见下:
send()用于向一个已经连接的socket发送数据,如果无错误,返回值为所发送数据的总数,否则返回SOCKET_ERROR。
简述
向一个已连接的 套接口发送数据。
#include < winsock.h>
int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);
s:一个用于标识已连接套接口的描述字。
buf:包含待发送数据的 缓冲区。
len:缓冲区中数据的长度。
flags:调用执行方式。
注释
send()适用于已连接的数据包或流式 套接口发送数据。对于数据报类套接口,必需注意发送数据长度不应超过 通讯子网的IP包最大长度。IP包最大长度在 WSAStartup()调用返回的WSAData的iMaxUdpDg元素中。如果数据太长无法自动通过下层协议,则返回WSAEMSGSIZE错误,数据不会被发送。
请注意成功地完成send()调用并不意味着 数据传送到达。
如果传送系统的 缓冲区空间不够保存需传送的数据,除非套接口处于非阻塞I/O方式,否则send()将阻塞。对于非阻塞SOCK_STREAM类型的套接口,实际写的数据数目可能在1到所需大小之间,其值取决于本地和远端主机的 缓冲区大小。可用 select()调用来确定何时能够进一步发送数据。
在相关套接口的选项之上,还可通过标志位flag来影响函数的执行方式。也就是说,本函数的语义既取决于套接口的选项也取决于标志位。后者由以下一些值组成:
值意义
MSG_DONTROUTE 指明数据不选径。一个WINDOWS套接口供应商可以忽略此标志;MSG_OOB 发送带外数据(仅适用于SO_STREAM;)。
返回值
若无错误发生,send()返回所发送数据的总数(请注意这个数字可能小于len中所规定的大小)。否则的话,返回SOCKET_ERROR错误, 应用程序可通过WSAGetLastError()获取相应 错误代码。
错误代码:
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:WINDOWS 套接口实现检测到网络子系统失效。
WSAEACESS:要求地址为广播地址,但相关标志未能正确设置。
WSAEINTR:通过一个 WSACancelBlockingCall()来取消一个(阻塞的)调用。
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
WSAEFAULT:buf参数不在用户 地址空间中的有效位置。
WSAENETRESET:由于WINDOWS套接口实现放弃了连接,故该连接必需被复位。
WSAENOBUFS:WINDOWS套接口实现报告一个 缓冲区 死锁。
WSAENOTCONN:套接口未被连接。
WSAENOTSOCK:描述字不是一个套接口。
WSAEOPNOTSUPP:已设置了MSG_OOB,但套接口非SOCK_STREAM类型。
WSAESHUTDOWN:套接口已被关闭。一个套接口以1或2的how参数调用 shutdown()关闭后,无法再用send()函数。
WSAEWOULDBLOCK:
WSAEMSGSIZE:套接口为 SOCK_DGRAM类型,且数据报大于WINDOWS套接口实现所支持的最大值。
WSAEINVAL:套接口未用 bind()*。
WSAECONNABORTED:由于超时或其他原因引起虚电路的中断。
WSAECONNRESET:虚电路被远端复位。
热心网友
时间:2023-10-14 19:23
buff是数组名字,中文解释是缓冲区,一般程序员习惯用buff在存放字符串。
热心网友
时间:2023-10-14 19:23
这个用法呢,最重要的就是要结合整体来运用一些插入的比较难以使用的方式
热心网友
时间:2023-10-14 19:22
C语言中的标准库中是没有Send函数的。
从名称来看应该是自定义的函数。具体实现的功能、参数及调用的要求,需要在阅读函数之后才能得到结论。
当然如果是C++的话,在Tcp中是具备Send函数的。具体见下:
send()用于向一个已经连接的socket发送数据,如果无错误,返回值为所发送数据的总数,否则返回SOCKET_ERROR。
简述
向一个已连接的 套接口发送数据。
#include < winsock.h>
int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);
s:一个用于标识已连接套接口的描述字。
buf:包含待发送数据的 缓冲区。
len:缓冲区中数据的长度。
flags:调用执行方式。
注释
send()适用于已连接的数据包或流式 套接口发送数据。对于数据报类套接口,必需注意发送数据长度不应超过 通讯子网的IP包最大长度。IP包最大长度在 WSAStartup()调用返回的WSAData的iMaxUdpDg元素中。如果数据太长无法自动通过下层协议,则返回WSAEMSGSIZE错误,数据不会被发送。
请注意成功地完成send()调用并不意味着 数据传送到达。
如果传送系统的 缓冲区空间不够保存需传送的数据,除非套接口处于非阻塞I/O方式,否则send()将阻塞。对于非阻塞SOCK_STREAM类型的套接口,实际写的数据数目可能在1到所需大小之间,其值取决于本地和远端主机的 缓冲区大小。可用 select()调用来确定何时能够进一步发送数据。
在相关套接口的选项之上,还可通过标志位flag来影响函数的执行方式。也就是说,本函数的语义既取决于套接口的选项也取决于标志位。后者由以下一些值组成:
值意义
MSG_DONTROUTE 指明数据不选径。一个WINDOWS套接口供应商可以忽略此标志;MSG_OOB 发送带外数据(仅适用于SO_STREAM;)。
返回值
若无错误发生,send()返回所发送数据的总数(请注意这个数字可能小于len中所规定的大小)。否则的话,返回SOCKET_ERROR错误, 应用程序可通过WSAGetLastError()获取相应 错误代码。
错误代码:
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:WINDOWS 套接口实现检测到网络子系统失效。
WSAEACESS:要求地址为广播地址,但相关标志未能正确设置。
WSAEINTR:通过一个 WSACancelBlockingCall()来取消一个(阻塞的)调用。
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
WSAEFAULT:buf参数不在用户 地址空间中的有效位置。
WSAENETRESET:由于WINDOWS套接口实现放弃了连接,故该连接必需被复位。
WSAENOBUFS:WINDOWS套接口实现报告一个 缓冲区 死锁。
WSAENOTCONN:套接口未被连接。
WSAENOTSOCK:描述字不是一个套接口。
WSAEOPNOTSUPP:已设置了MSG_OOB,但套接口非SOCK_STREAM类型。
WSAESHUTDOWN:套接口已被关闭。一个套接口以1或2的how参数调用 shutdown()关闭后,无法再用send()函数。
WSAEWOULDBLOCK:
WSAEMSGSIZE:套接口为 SOCK_DGRAM类型,且数据报大于WINDOWS套接口实现所支持的最大值。
WSAEINVAL:套接口未用 bind()*。
WSAECONNABORTED:由于超时或其他原因引起虚电路的中断。
WSAECONNRESET:虚电路被远端复位。
热心网友
时间:2023-10-14 19:23
buff是数组名字,中文解释是缓冲区,一般程序员习惯用buff在存放字符串。
热心网友
时间:2023-10-14 19:23
这个用法呢,最重要的就是要结合整体来运用一些插入的比较难以使用的方式
热心网友
时间:2023-10-14 19:24
一般我们可以用按键盘上面的F12通过这个鼠标,然后点击保存自己编辑的这个数据点保存之后就可以直接使用了,这个是最简单的方法之一。
热心网友
时间:2023-10-14 19:24
在C语言中C D布洛芬用法应该是用不住啊,有事乐尔自助行业的嗯,这个行业的非常完美的待一待熏死。
热心网友
时间:2023-10-14 19:24
一般我们可以用按键盘上面的F12通过这个鼠标,然后点击保存自己编辑的这个数据点保存之后就可以直接使用了,这个是最简单的方法之一。
热心网友
时间:2023-10-14 19:24
在C语言中C D布洛芬用法应该是用不住啊,有事乐尔自助行业的嗯,这个行业的非常完美的待一待熏死。
在C语言中send buff的用法?
C语言中的标准库中是没有Send函数的。从名称来看应该是自定义的函数。具体实现的功能、参数及调用的要求,需要在阅读函数之后才能得到结论。当然如果是C++的话,在Tcp中是具备Send函数的。具体见下:send()用于向一个已经连接的socket发送数据,如果无错误,返回值为所发送数据的总数,否则返回SOCKET_ERROR...
C语言Server和服务器之间的通信协议采用包头Header+包体Body的形式,能 ...
SendBuffer((const char*)&a,a.uLen);接收端也是如此,根据Opcode的值,将收到的数据流强制类型转换成Protrol的指针就可以了。比如收到的buff是:const char szBuff[1024]={0};const Protrol* pMsg = (const Protrol*)szBuff;这样就可以了。pMsg -> nBody ;就是你要的值。现阶段 你学习到...
编程的兄弟,能不能介绍下c语言中,流是怎么通过socket接收的。。接收到...
saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST );saUdpServ.sin_port = htons (7001);//发送用的端口,可以根据需要更改 nSize = sizeof ( SOCKADDR_IN );while(1){ sprintf(sendBuff,"Message %d",ncount++);sendto ( sockListener,sendBuff,lstrlen (sendBuff),0,(SOCKADDR *...
LWIP tcp_write疑问
void tcpsenddata(void){ //tcp_sndbuf(); tcp_write(pcb_t,(void*)SendBuff,sizeof(SendBuff),0); tcp_output(pcb_t); // pbuf_free(*SendBuff);//±ØÐëµ÷Óô˺¯ÊýÊÍ·Å}在main函数里利用按键发送数据,发现最多发送50个数据就没反应了,但是在TCP_Receive...
C语言编程怎么将截断一个数组的一部分
如果是字符数组,可以使用strncpy函数,根据需要截取需要部分。strncpy 是 C语言的库函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *dest, char *src, int n),把src所指字符串的前n个字节复制到dest所指的数组中,并返回指向dest的指针。如果是普通数组,使用循环语句,将需要的...
请教send()函数的用法:
一般在传送数据时要在最后加上一个校验位,所以要把数据长度加1,不过各个函数的定义也不一定相同
C语言 socket编程 客户端只send一次 但是服务器会循环执行这条命令...
socket,recv_buff, sizeof(recv_buff), 0); /*receiveclient's command*/ 改成 int ret = recv(comm_socket,recv_buff, sizeof(recv_buff), 0); /*receiveclient's command*/ if ret == -1 || ret == 0 break == -1 表示出错, =0 表示 socket 已经关闭。
C语言中如何将2个结构体拼成一个包
memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include <string.h> 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。 可以拿它拷贝任何数据类型的对象。 例:char a[10],b[5];...
用C语言在Linux平台上写一个占用tcp8080端口的代码。
char buff[256];memset(buff,0,256);if((numbytes = recv(new_fd,buff,sizeof(buff),0))==-1){ perror("recv");exit(1);} printf("%s",buff);//将从客户端接收到的信息再发回客户端 if(send(new_fd,buff,strlen(buff),0)==-1)perror("send");close(new_fd);exit(0);} clo...
C语言,关于回车换还行的的问题。给数组赋值0x0a 与0x0d,
光标回到行首(Linux系统中是没有'\r'回车符的)。你的代码不全,估计是通过mask变量实现先赋0x0d(即回车符),再判断mask是否不为零,不为零则表示已赋回车符,然后再赋0x0a(即换行符)。0x0d、0x0a只是回车换行符的八进制数值,当然也可以用十进制数值13、10来代替,没有区别。