当前位置:首页 » 编程语言 » c语言recv

c语言recv

发布时间: 2023-04-15 06:21:39

A. c语言文件传输

服务器端(发送文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以发送二进制文件,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充服务器的地址,即填充sockaddr_in结构,然后进行绑定【bind】,设置套接字为监听套接字【listen】,接收连接【accept】,至此服务器阻塞,等待客户端的连接。
客户端(接收文件):首先打开文件【fopen】,用wb方式打开,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充客户端的地址,即填充sockaddr_in结构,然后进行绑定【bind】,再填充服务器的地址结构,然后调用【connect】进行连接,当连接成功后,第一阶段的工作便结束了。
第二阶段,发送文件。
服务器端:使用循环while,结束条件是(!feof(fp)),fp是文件指针,feof检测当前的文件读取指针是否到达文件尾部,若到达了就返回真,否则返回假。然后在循环内部依次调用【fread】、【send】进行发送。这里有一个问题需要注意,调用fread的时候有两个参数是要每次读多少字节和读多少次,将第一个设置为1,将第二个设置为缓冲区的大小,用一个变量记录实际读到多少字节,即【fread】的返回值,然后将其传递给【send】,就可以实现发送文件了,在发送完成后断开连接【closesocket】,关闭文件【fclose】。
客户端:使用while死循环,调用【recv】接收文件,【fwrite】写入文件,这里也有个和上面类似的问题,就是要将recv的返回值传递给fwrite的第三个参数,即受到了多少字节,就向文件中写多少字节。当recv返回值为0时(连接断开时)退出循环,【closesocket】关闭套接字,调用【fclose】关闭文件。

B. linux中C语言的一个函数的源代码:socket 编程中的 recv() 函数。

1、recv是socket编程中最常用的函数之一,在阻塞状态的recv有时候会返回不同的值,而对于错误值也有相应的错误码,分别对应不同的状态。
2、recv函数只是在用户空间定义的。内核空间有与之对应的函数,也就是说,执行recv函数就会调用到内核中与它对应的函数,实际起作用的就是内核里的这个函数。至于内核里调用的是那个函数,内核里的调用关系复杂的很,除非对内核非常了解的,才会找到到底是怎么调用的,他也是只是找到怎么调用的。

C. c语言的recv()非阻塞方法怎么弄哦

需要将recv设置超时,Linux下设置超时如下:

//设置发送超时
struct timeval timeout={3,0};//3s
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval));
//设置接收超时
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval));
windows下设置超时如下:

int timeout = 3000; //3s
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,&timeout,sizeof(timeout));
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,&timeout,sizeof(timeout));

D. C语言/C++,用recv获取网页源代码,中文为什么是乱码 代码如下:

这种问题通常是你的代码在处理字符串是弄错了。。。
接收过来的内容应该没问题吧。。。。
只是显示的时候弄错了吧。。
仔细检查一下,中文字符占2个字节,指针头别弄错了,最后加上'\0'别加错位置。。。
如果英文字符都不可以正确显示的话,那可能是粘包。
还有是不是编码问题。

E. C语言中SOCKET关于send和recv的问题,不懂别乱贴

说实在的这个问题非常简单,不过你习惯太差,你把send和recv的返回值看看不就明白了!
前提是你描述的都是事实。
否则还可能有Socket问题。
如果是linux,strace一下就知道什么问题了。
Windows的也很简单。

前面的明显不正确,send如果是TCP,(UDP 不应该用send),send返回时,消息已经发出了。

热点内容
oracle同步mysql数据库 发布:2025-07-18 00:42:27 浏览:190
go语言编译其他平台 发布:2025-07-18 00:42:23 浏览:279
二叉树非递归先序遍历算法 发布:2025-07-18 00:39:45 浏览:355
压缩热泵循环 发布:2025-07-18 00:38:04 浏览:887
安卓自动升级在哪里关掉 发布:2025-07-18 00:36:37 浏览:360
键盘按f9键不可以编译怎么调 发布:2025-07-18 00:11:34 浏览:312
安卓手机的广告如何删除 发布:2025-07-18 00:10:50 浏览:105
linux安装composer 发布:2025-07-18 00:04:52 浏览:241
地址存储器的容量 发布:2025-07-17 23:42:56 浏览:167
win7电脑用户名和密码在哪里查询 发布:2025-07-17 23:39:44 浏览:476