LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 798|回复: 5

信号和socket

[复制链接]
发表于 2005-10-15 18:59:43 | 显示全部楼层 |阅读模式
问题背景:
通过socket做一个双向通信的小程序,两边都可发送和接收. 我在server和client端都设置了数组存储将要发送和已经接收到的信息(可理解为缓冲).程序想实现按下F1键若发送缓冲中有数据,则发出.按下F2键若接收缓冲中有数据,则打印在屏幕上,
问题1.
按F1和F2键想通过接收信号来实现,即程序一直监听有无这两个键按下,若有,则进行相应操作.
查阅了相关书籍,但是讲的较略.感觉应该通过SIGUSR1或者SIGUSR2来实现,但是如何将SIGUSR1和
F1联系起来?或者说我的理解有问题此路不通?(google上没有提到这些)
问题2.
我是在一个socket上又接收又发送,如果server和client完全同时发送是否会有数据丢失?


花了近半个小时才进来,网络太慢了........
请个位帮忙,谢了先.
发表于 2005-10-15 20:03:17 | 显示全部楼层
1.建议你用select来实现,不要用信号。如果非得要用信号,得用实时信号。常规信号是不可靠的。
2.数据的传输由tcp/ip协议自动处理。不需要应用层软件来操心。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-15 20:26:57 | 显示全部楼层
select可以实现按下F1或者F2时执行某些操作?我在研究研究这个函数.............
多谢kj501
回复 支持 反对

使用道具 举报

发表于 2005-10-15 21:46:58 | 显示全部楼层
想了一下
假设连接已经建立,并且需要吧套接字设成非阻塞,用tcsetattr将终端模式设成没有缓冲的,
然后用别的字符操作吧,不要用F1,F2这些别的程序可能占用的快捷键。然后判断字符,然后
检察缓冲区,操就就完成了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-15 21:49:18 | 显示全部楼层
多谢楼上的,我试试。
回复 支持 反对

使用道具 举报

发表于 2005-10-17 09:28:36 | 显示全部楼层
是否可以新建立一个单独的线程专门处理键盘事件?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表