随笔-18  评论-11  文章-12  trackbacks-0
 
    socket是网络编程的基础,本文用打电话来类比socket通信中建立TCP连接的过程。
    socket函数,表示你买了或者借了一部手机。
    bind函数,告诉别人你的手机号码,让他们给你打电话。
    listen函数,打开手机的铃声,而不是静音,这样有电话时可以立马反应。listen函数的第二个参数,最大连接数,表示最多有几个人可以同时拨打你的号码。不过我们的手机,最多只能有一个人打进来,要不然就提示占线。
    connect函数,你的朋友知道了你的号码,通过这个号码来联系你。在他等待你回应的时候,不能做其他事情,所以connect函数是阻塞的。
    accept函数,你听到了电话铃声,接电话,accept it!然后“喂”一声,你的朋友听到你的回应,知道电话已经打进去了。至此,一个TCP连接建立了。
    read/write函数,连接建立后,TCP的两端可以互相收发消息,这时候的连接是全双工的。对应打电话中的电话煲。
    close函数,通话完毕,一方说“我挂了”,另一方回应"你挂吧",然后将连接终止。实际的close(sockfd)有些不同,它不止是终止连接,还把手机也归还,不在占有这部手机,就当是公用电话吧。
    注意到,上述连接是阻塞的,你一次只能响应一个用户的连接请求,但在实际网络编程中,一个服务器服务于多个客户,上述方案也就行不通了,怎么办?想一想1860,移动的声讯服务台,也是只有一个号码,它怎么能同时服务那么多人呢?可以这样理解,在你打电话到1860时,总服务台会让一个接线员来为你服务,而它自己却继续监听有没有新的电话接入。在网络编程中,这个过程类似于fork一个子进程,建立实际的通信连接,而主进程继续监听。1860的接线员是有限的,所以当连接的人数达到上线时,它会放首歌给你听,忙等待,直到有新的空闲接线员为止。
    实际网络编程中,处理并发的方式还有select/poll/epoll等。

下面是一个实际的socket通信过程:


posted @ 2008-10-26 17:09 ronliu 阅读(4056) | 评论 (4)编辑 收藏
面试百度时,面试官问我,如何统计一个文本文件的行数,可以使用一种脚本语言。汗,我告诉他,用for循环,一行行地去读吧。然后听见面试官很小心的咕哝了一句,wc这种常用命令也不知道呀。:(
本文只是列出了各个命令的简要功能,欲知详情,man吧!

ls 显示目录中的文件名
ps 查看当前进程快照
kill 向进程发送一个信号,如杀死进程
more 显示文本文件,但一次只显示一屏
sort 按行对文本文件进行排序
chmod 改变文件的模式,如可执行+x
echo 输出变量的值
read 将用户的输入赋给变量
env 在一个被改变了的环境中运行程序
test 检测文件的类型,比较值。例如检测文件是否存在,字符串比较等
touch 检测文件是否存在,如果不存在就创建它
rm 删除一个文件或者目录
wc 显示文本文件的行数、字数信息
cp 复制文件或目录,常用参数-r, -u
mkdir 创建目录
ln 在文件之间创建链接

内部命令:
break 跳出当前循环
continue 跳出本次循环,继续下一次循环
:空命令,相当于true的别名
. 用来执行shell中的命令,类型与#include
eval 允许你对参数求值,有点像一个而外的$,他给出一个变量值的值
exec 将当前的shell替换一个不同的程序,其之后的代码不会执行
exit n 退出码 n
export 将作为它参数的变量到处到子shell中,作为子进程的环境变量
expr 将参数当作表达式来求值,如简单的数学运算
`` 对反引号内的代码当作命令执行,求的结果赋给变量
return 是函数返回
set 为shell设置参数变量 set $(date),将当前date作为参数
shift 所有参数变量左移1个位置$3变为$2
trap 用于接收到指定信号后将要采取的行动,如INT CTRL+C。即可以设定Ctrl+C后,程序如何响应。
unset 从环境中删除变量或函数
find 查找文件 find [path] [option] [test] [action]
    option包括find深度,是否find mount的文件夹等,test包括name, mtime,action例如print,exec

编程相关命令:
strings 打印文件中的可打印字符,如查看一个可执行文件中的可打印字符。
nm 列出对象文件(object files)的符号列表,如查看用gcc编译出来的可执行文件的符号列表。
strip  删除对象文件中的符号列表。这样可以使得可执行文件有更小的体积。
strace 很强大的命令,显示所有由用户空间程序发出的系统调用。用于调试。
posted @ 2008-10-17 16:48 ronliu 阅读(656) | 评论 (0)编辑 收藏
      从星期五晚上开始,一直在装系统,甚至于昨天晚上还熬通宵摆弄这东西。只是到目前为止,手头上的这个Linux系统仍然问题重重,不堪使用。明天又是新的一天,工作日,重装系统的爱好就得先放放了。以下是这两天的“成果”。
      ~修改Grub引导区失败一次,导致RedHat9无法引导,电脑无法启动,借光驱格盘。
      ~Ubuntu8.04硬盘安装一次,失败,原因同上,Grub引导出错。
      ~Ubuntu8.04 Wubi安装两次,体验了传说中的Ubuntu,但无法上网,基本等同于废物了,比较适合初学者。
      ~RedHat9安装一次。字体配置文件丢失,Wine无法安装,无赖重装,但在我的电脑上仅存1天不到。
      ~SuSe硬盘安装一次,用的比较舒服,Wine成功,Qt失败,声音解码器失败,gcc编译器向下兼容……
      ~U盘安装系统一次,失败,电脑无法从U盘引导,或许是引导盘没做好,但已经没兴趣了,借光驱ing
      ~光盘安装Windows2003一次,将无法引导的那个机器恢复,oye!
      ~比较FC,Ubuntu,Suse,RedHat,各个的优缺点。
       其间出过U盘被分区无法识别的乌龙,也学会单用户登录,修改Grub入门,等等,但总的来说,这个周末收获不大。目前这台电脑上幸存三个系统,Suse10,WinXP,Ubuntu(Wubi)。整个周末都耗在这个上面了,很无语。无论如何,进一段时间再重装这台机器了,太无聊。生命中还有很多美好的事情可以体验,比如睡觉!

posted @ 2008-06-15 23:08 ronliu 阅读(271) | 评论 (0)编辑 收藏
    RedHat9, 在安装光盘中的KDE包后, 无法进入X. 以下为解决过程.

1. 以单用户的模式进入Linux  参考
2. 修改启动文件/etc/inittab, id:5:initdefalut: 将5改为3
3. 在文字模式下, startx, 尝试启动X11. 报错. Could not open default font "fixed"
    注释掉/etc/X11/XF86Config中的  FontPath "unix/:7100", startx, 回到久违的X11 参考



说明
--------
1. 进入grub模式下, 也可以进入单用户状态, 但没有成功.
2. 以为字体丢失, 打算重新安装系统盘中的XFree86包, 提示已安装. (需要先将文件从光盘复制到其他盘)
posted @ 2008-06-12 21:44 ronliu 阅读(307) | 评论 (0)编辑 收藏
一 基础命令
    挂载: mount /dev/sda /mnt/usb
    卸载: umount /mnt/usb
参数:
    -t vfat 指定挂载盘的类型
    -o 为挂载指定可选项, 如charset等
    -l 强制卸载磁盘

二 乱码
    在挂载时需要指定字符集. 对于U盘, mount /dev/sda /mnt/usb -o iocharset=cp936. 对于挂到Linux下的其他Winodw盘, 需要使用vim /etc/fstab命令修改配置文件, /dev/hdb7  /mnt/f  vfat  iocharset=cp936,defaults  0 0.
    系统RedHat9.0, 其他系统或有不同, 需要找到对应中文字符集. 如cp950, gb2312

三 大小写
    有些短文件名, 如果全大写, 会显示为全小写. 影响使用. 在挂载时, 加上shortname=mixed的参数即可解决.

四 说明
    注意到, 将这些挂载磁盘的选项写入到/etc/fstab中, 可在系统启动时自动加载.

posted @ 2008-06-11 15:03 ronliu 阅读(327) | 评论 (0)编辑 收藏
1. 
<script> 

function test(object) 

alert(object.value); 
}
 

</script> 

<input type="button" name="one" value="one" onclick="test(this)"> 

<input type="button" name="tow" value="tow" onclick="test(this)"> 

function test() 

var object =event.srcElement // 得到调用者的引用 object 
alert(object.value); 
}
 
posted @ 2008-05-31 16:11 ronliu 阅读(1898) | 评论 (0)编辑 收藏
1. 在window.showModalDialog的弹出对话框中,刷新父页面。
    window.opener.location.href=window.opener.location.href

posted @ 2008-05-31 15:07 ronliu 阅读(267) | 评论 (0)编辑 收藏
        在开发中,测试的数据库服务器和正式的通常不在一起。这就涉及到数据库连接的更新。在丢失过一次所有字段之后,发现是自己想复杂了。数据库-》设置数据源位置。OK。
        但我的报表中有一个以XML为数据源的子报表,在设置数据源位置时,CR总是死掉,删除这个子报表后一切正常了。原因未知。
        报表更复杂一些,参见:http://topic.csdn.net/t/20031113/17/2457889.html#
posted @ 2008-05-30 16:26 ronliu 阅读(1283) | 评论 (0)编辑 收藏
仅列出标题
共2页: 1 2