免费注册 查看新帖 |

Chinaunix

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

关于TCP打印阻塞的问题。(急) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-07 16:01 |只看该作者 |倒序浏览
我在写一个网络打印的程序,遇到下面问题请大家帮我分析。
1)我客户端用的是LPRng打印,打印驱动在客户端。
2)我做的是边接收数据包边打印。即客户端边发送数据给服务端,服务端边打印。
3)主要问题是TCP/IP包传输的速度快,写数据到打印设备速度慢,就引起数据积余。怎样让数据阻塞,让TCP包阻塞一段时间再发。

服务端流程如下:
read()读取网络设备数据--->;write()将数据写到/dev/usb/lp0。
等我传输一会write()返回值是-1,表示空间不够。怎样让阻塞一端时间再读取数据。请大家帮帮忙。。。。。

论坛徽章:
0
2 [报告]
发表于 2005-07-07 16:15 |只看该作者

关于TCP打印阻塞的问题。(急)

你这个问题最好在客户端解决,
客户端用多线程或者多进程处理。

论坛徽章:
0
3 [报告]
发表于 2005-07-07 16:27 |只看该作者

关于TCP打印阻塞的问题。(急)

我不能修改客户端程序,客户端是用LPRng打印。所以只能修改服务端了。能不能有什么办法把TCP/IP阻塞。

论坛徽章:
0
4 [报告]
发表于 2005-07-07 16:33 |只看该作者

关于TCP打印阻塞的问题。(急)

sleep
或者用select

论坛徽章:
0
5 [报告]
发表于 2005-07-07 16:44 |只看该作者

关于TCP打印阻塞的问题。(急)

谢谢!
sleep我试过了。因为ACK接收数据超过200ms就会断开了。
如果我用sleep(),等打印设备写完后,再接收数据,但网络就断开了。
select不知道怎么用法,int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *except fds,struct timeval *timeout)
我不知道具体有什么功能。

论坛徽章:
0
6 [报告]
发表于 2005-07-07 16:54 |只看该作者

关于TCP打印阻塞的问题。(急)

〉〉因为ACK接收数据超过200ms就会断开了。
如果我用sleep(),等打印设备写完后,再接收数据,但网络就断开了。
不明白这句话的意思,tcp不会自动断开,除非你应用程序有断开动作。
————————————————————————————————
如果用select的话,把你写入端描述字加到writefds集合中就可以了。select 会自动阻塞到写入缓冲中有空间为止。select返回后调用write就可以了。

论坛徽章:
0
7 [报告]
发表于 2005-07-07 17:01 |只看该作者

关于TCP打印阻塞的问题。(急)

我想也许是客户端有自动断开的判断。
select我先用用,明天再向你请教。

论坛徽章:
0
8 [报告]
发表于 2005-07-07 17:06 |只看该作者

关于TCP打印阻塞的问题。(急)

晕,我上面看错了。
你是在服务器端打印,你应该将服务器设计为多线程的。

论坛徽章:
0
9 [报告]
发表于 2005-07-07 17:44 |只看该作者

关于TCP打印阻塞的问题。(急)

我设置的是多线程的,我上面也看错了,select不能解决阻塞,select只是检查设备是否有数据,如果有再读取,或写。但不能控制阻塞。
我现在的问题是硬盘空间只有2M空余空间。不能将数据下载到硬盘再打印。

论坛徽章:
0
10 [报告]
发表于 2005-07-07 19:39 |只看该作者

关于TCP打印阻塞的问题。(急)

你为什么要将数据下再到硬盘,从缓冲区中取到数据后直接送到打印机不就可以了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP