c语言socket编程read()函数问题

就是一个基于ftp的程序 服务器向我发过来数据,txt文件可以完美接收,但是jpg文件只能收到一部分。ftp用的也是binary模式。请问如何解决?

write/read,是关于写特定的文件描述符使用的比较底层的系统调用,
sendto/recvfrom适用于用udp(数据包)方式的套接字中使用的,

其他的没见过,我是学linux编程的

Windows下的socket和Linux下的socket是不一样的,我没有查到sendmsg/recvmsg这个方法,上面的链接是一个类似的函数,它和send/recv 的区别是,这个函数可以发送socket控制信息,看API就知道。
另外我也没有看到有write/read函数。 sendto/recvfrom用于UDP链接,send/recv用于TCP链接。
你列举的其余函数,我都没找到。下面的API地址供楼主查询验证。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms741692(v=vs.85).aspx
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-06-06
socket是有字节传输上限的,就是一个数据包的数据量是有最大限度的
你的txt肯定很小,图片就大了,解决方案就是你分包发送,就是一次发
固定的字节数,然后加标志位判断是否接受完成,将接受的数据放到缓
存,这样就能完成你要的功能了

深刻理解socket编程中的read&&write
read 调用的行为则相对简单直观,它从接收缓冲区中复制数据到应用程序的缓冲区中。若 read 调用阻塞,通常是因为发送端的数据尚未到达接收端。在 blocking 和 nonblock 模式下,read 和 write 的行为存在显著差异。在非阻塞模式下,read 函数会在接收缓冲区有数据时立即返回,而不会等待缓冲区填满。相反...

socket read问题
你读到的数据会存入到数组中,这个是判断数组最后一位是否有值 也就是说是否还有数据没读完 是否需要继续往下读 他这么判断是说 如果是0就表示读完了 !=0的话就先赋值给result 然后继续读 继续赋值 但存在这种可能 也许这位数据刚好是0 那这么判断就不行了 ...

关于socket编程问题,100分急求
1. 你只要不断地调用read(socket, rev_buf, MAX_REV_BUF_SIZE-1), 并在while循环里检查read的返回值是不是为0,只要不是0,就把它rev_buf加到一个string中。所以不需要用EOF flag,只要client端不发送了,服务器端read的时候就会返回0.2. 缓冲区只会对TCP\/IP的协议栈的读取有影响,它的设...

C#中,socket通信,怎么知道对方的信息已经发完?用read()如果没有可接收...
可以采用验证的方式,自定义一个通讯的协议,发送数据时先发送数据的长度,接收数据结束后验证的数据长度是否符合,符合则接收完毕,不符合再定义后面的处理方法。

C语言Socket中的Read
tup1 = ('physics', 'chemistry', 1997, 2000);tup2 = (1, 2, 3, 4, 5, 6, 7 );print "tup1[0]: ", tup1[0]print "tup2[1:5]: ", tup2[1:5

关于socket编程问题,100分急求
1、首先若大量包裹是一起发的,完全不用操心这个问题,客户端发完包时会close链接,此时会发一个FIN信息表示已经发送完毕,这时服务器会自动收到FIN信息知道客户端完成发包完成了。而这些操作都是在socket api级别完成的,不用额外发一个EOF标志。2、客户端包大于服务器缓冲区,这也不是你操心的,api...

Socket编程:关于BufferedInputStream的read方法问题
服务端代码 input.close();下面加上一段代码:out.close();服务端发送完之后,程序退出 客户端没有收到流发送完毕的通知,一直在等待,等待的时候服务端异常退出,导致报错 加上的那段代码向客户端发送结束标志

socket编程中write,read和send,recv之间的区别
1、recv和send函数提供了和read和write差不多的功能。但是他们提供了第四个参数来控制读写操作.int recv(int sockfd,void *buf,int len,int flags)int send(int sockfd,void *buf,int len,int flags)前面的三个参数和read,write相同,第四个参数能够是0或是以下的组合:___| MSG_DONTROUTE | ...

socket read 能一次读满吗
所以我们需要人为的来做一些调整。比如说每一帧作为一行写入Socket,客户端每次从socket读取一行。这样客户端每次都是读取一帧。以上情况可以这样实现:在服务端使用PrintWriter 1 2 PrintWriter writer=new PrintWriter(socket.getOutputStream());writer.println(data);客户端可以使用BufferedReader ...

socket编程报错如何解决?
我在进行一个CS结构聊天工具Socket编程的时候,碰到了下面的场景:我的主框架的代码为:DataInputStream dips3 = new DataInputStream(so3.getInputStream()); while(true){ C_portManageRecvDportData m8 = new C_portManageRecvDportData(so2); m8.start(); String buffertemp3 = dips3.read...

相似回答