LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: kj501

试着编写了一个客户-服务器程序

[复制链接]
发表于 2003-4-11 10:15:47 | 显示全部楼层
确实存在这个问题,看来还要把标准输入重定向到socket。

well, if you redirect the stdout to that socket, what happen if the program invoked is blocked when it read() from stdio?
Maybe, you need to FD_CLR the fd of socket before pass the socket to exec_command() ...
发表于 2003-4-11 10:19:54 | 显示全部楼层
Please, someone tell me howto quote??

from kj501:
端口21是用来连接新的socket的。一旦连接成功,服务器会给这个新的socket分配一个没有使用的新端口号,而原来的端口21被空闲出来给下一个连接。如果原来的连接继续占用端口21,那么新的连接必须等到原来的连接结束后,才能使用端口21。

Again, the above is not correct, all the incoming connection still connect to local port 21, not another number.
 楼主| 发表于 2003-4-11 10:20:10 | 显示全部楼层
呵呵,看来并行程序设计并不是象我想象的那么简单,我再考虑一下如何处理这个问题。
发表于 2003-4-11 10:57:23 | 显示全部楼层
我可以用中文了,不好意思,那位可以告诉我怎么引用别人的发言?

我想,一个很大的问题是你使用的 system() 多半会将整个进程阻塞,等待其调用的sh运行结束。这样你的服务器对于多个用户来说,还是顺序服务,而不是并发的。
 楼主| 发表于 2003-4-11 11:49:34 | 显示全部楼层
在每个人发的贴子右下角,有两个小图标。其中有一只笔在本本上写的,是用来修改自己发出去的贴子的。旁边那个就是引用别人的发言。
程序确实需要改进。让我再认真思考一下。
发表于 2003-4-12 01:30:58 | 显示全部楼层
谢谢啦!昨天我找了半天也没有找到你们是怎么quote的。

我想,使用多进程或者多线索恐怕是最方便的了。
要不,在 exec_command() 里面也检查检查 read() write() 会不会阻塞。
 楼主| 发表于 2003-4-12 08:23:48 | 显示全部楼层
我说的那两个图标就在每张贴子的右下角。
 楼主| 发表于 2003-4-12 08:39:26 | 显示全部楼层
昨天捧着<用TCP/IP进行网际互联>第三卷恶补了一番。搞清楚了一些问题。呵呵。。。
select是用来处理异步I/O的,程序员可以用它来设计并发I/O的程序。比如说服务器既要接受键盘输入,又要从socket中读取数据,但又没有办法知道谁先输入的情况下,用select来处理是比较合适的。但它并不是多进程(或线程)的并发处理程序。
发表于 2003-4-13 00:47:19 | 显示全部楼层
很有意思 ! 我这段时间忙者 作个管理系统(作业),要不是的话我可以帮大哥测试的 !我合同学在外面租了个房子 有三台电脑!
过段时间(半年了), 我准备和同学合作 开发个 linux下的 网络小游戏
作为毕业设计  到时候再说!
发表于 2003-4-15 00:27:29 | 显示全部楼层
我做了一个简单的 SOCKS5 proxy ,不同的连接用的是thread,一个链接里面嫁接客户端和远程的机器那段用了 select()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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