免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2456 | 回复: 2
打印 上一主题 下一主题

请教各位关于网络编程中的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-29 12:28 |显示全部楼层 |倒序浏览
7可用积分
各位好, 我对网络编程没有太多经验. 想请教一下大家是怎么做的.
比如说在传送数据的时候, 有几种方式:
1.在每次传送数据之前将此次数据的长度先发送过去, 然后再进行传送, 而接收方则while (read() > 0)一起接收, 然后计算接收到的数据在大小.如果说接收到的数据等于了开始接收到的长度那么多.然后就break出这个循环.
2.使用一个结构体.

  1. struct sa
  2. {
  3.      int count;
  4.      char buf[100];
  5. };
复制代码

每次先接收四个字节的数据即count的值,其表示此次将接收多少个数据. 然后根据count的值来read()相应长度的数据. 其实这种方式与第一种差不多的. 只是说每次接收的数量少一些, 好控制一些.
其实主要是在网络编程中感觉网络因素太多了. read()的所接收到的包的大小又不一定等于其第三个参数所指定的那么多数量. 因为存在MTU, 一次write()的数据也可能会分成多个包发送.
由于在网络编程方面没有什么经验, 所以希望各位高手能指点一下. 或者说一说您平时都是怎样来进行传输的?
在此谢过!

[ 本帖最后由 cunettenuc 于 2007-7-29 12:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-07-29 23:40 |显示全部楼层
原帖由 hightman 于 2007-7-29 23:28 发表
一般2种方式:
1. 按行读取(读到\n结束,忽略\r),类似文件中的 fgets(),然后在行数据中存放指令,适用于纯 ascii 字符集的传输。
2. 按长度读取,像 binary 数据之类。基于 tcp 协议你就不必考虑 mtu 分段 ...



先谢谢.
您说的第一种方式更多地用在交互式这种方式.
第二种方式更多地用在文件传输这种方式吧?
是吗?

论坛徽章:
0
3 [报告]
发表于 2007-07-29 23:52 |显示全部楼层
原帖由 flw2 于 2007-7-29 16:46 发表
即便是文件,你通常也不会检查一下文件大小再读,只是读到差不多的时候就停(通常是没有数据了)



但是如果我一端要向另外一端发送两个文件,我怎么区别这两个文件呢?
我想的就是先发送文件大小, 然后再进行接收.
read()在接收到EOF的时候返回0.
但是网络上的一端如何通过write()向另一端发送EOF这个结束符呢?
望指教.谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP