socket是網(wǎng)絡(luò)編程的基礎(chǔ),本文用打電話來(lái)類比socket通信中建立TCP連接的過(guò)程。
socket函數(shù),表示你買了或者借了一部手機(jī)。
bind函數(shù),告訴別人你的手機(jī)號(hào)碼,讓他們給你打電話。
listen函數(shù),打開手機(jī)的鈴聲,而不是靜音,這樣有電話時(shí)可以立馬反應(yīng)。listen函數(shù)的第二個(gè)參數(shù),最大連接數(shù),表示最多有幾個(gè)人可以同時(shí)撥打你的號(hào)碼。不過(guò)我們的手機(jī),最多只能有一個(gè)人打進(jìn)來(lái),要不然就提示占線。
connect函數(shù),你的朋友知道了你的號(hào)碼,通過(guò)這個(gè)號(hào)碼來(lái)聯(lián)系你。在他等待你回應(yīng)的時(shí)候,不能做其他事情,所以connect函數(shù)是阻塞的。
accept函數(shù),你聽到了電話鈴聲,接電話,accept it!然后“喂”一聲,你的朋友聽到你的回應(yīng),知道電話已經(jīng)打進(jìn)去了。至此,一個(gè)TCP連接建立了。
read/write函數(shù),連接建立后,TCP的兩端可以互相收發(fā)消息,這時(shí)候的連接是全雙工的。對(duì)應(yīng)打電話中的電話煲。
close函數(shù),通話完畢,一方說(shuō)“我掛了”,另一方回應(yīng)"你掛吧",然后將連接終止。實(shí)際的close(sockfd)有些不同,它不止是終止連接,還把手機(jī)也歸還,不在占有這部手機(jī),就當(dāng)是公用電話吧。
注意到,上述連接是阻塞的,你一次只能響應(yīng)一個(gè)用戶的連接請(qǐng)求,但在實(shí)際網(wǎng)絡(luò)編程中,一個(gè)服務(wù)器服務(wù)于多個(gè)客戶,上述方案也就行不通了,怎么辦?想一想1860,移動(dòng)的聲訊服務(wù)臺(tái),也是只有一個(gè)號(hào)碼,它怎么能同時(shí)服務(wù)那么多人呢?可以這樣理解,在你打電話到1860時(shí),總服務(wù)臺(tái)會(huì)讓一個(gè)接線員來(lái)為你服務(wù),而它自己卻繼續(xù)監(jiān)聽有沒(méi)有新的電話接入。在網(wǎng)絡(luò)編程中,這個(gè)過(guò)程類似于fork一個(gè)子進(jìn)程,建立實(shí)際的通信連接,而主進(jìn)程繼續(xù)監(jiān)聽。1860的接線員是有限的,所以當(dāng)連接的人數(shù)達(dá)到上線時(shí),它會(huì)放首歌給你聽,忙等待,直到有新的空閑接線員為止。
實(shí)際網(wǎng)絡(luò)編程中,處理并發(fā)的方式還有select/poll/epoll等。
下面是一個(gè)實(shí)際的socket通信過(guò)程:
posted @
2008-10-26 17:09 ronliu 閱讀(4098) |
評(píng)論 (4) |
編輯 收藏
面試百度時(shí),面試官問(wèn)我,如何統(tǒng)計(jì)一個(gè)文本文件的行數(shù),可以使用一種腳本語(yǔ)言。汗,我告訴他,用for循環(huán),一行行地去讀吧。然后聽見面試官很小心的咕噥了一句,wc這種常用命令也不知道呀。:(
本文只是列出了各個(gè)命令的簡(jiǎn)要功能,欲知詳情,man吧!
ls 顯示目錄中的文件名
ps 查看當(dāng)前進(jìn)程快照
kill 向進(jìn)程發(fā)送一個(gè)信號(hào),如殺死進(jìn)程
more 顯示文本文件,但一次只顯示一屏
sort 按行對(duì)文本文件進(jìn)行排序
chmod 改變文件的模式,如可執(zhí)行+x
echo 輸出變量的值
read 將用戶的輸入賦給變量
env 在一個(gè)被改變了的環(huán)境中運(yùn)行程序
test 檢測(cè)文件的類型,比較值。例如檢測(cè)文件是否存在,字符串比較等
touch 檢測(cè)文件是否存在,如果不存在就創(chuàng)建它
rm 刪除一個(gè)文件或者目錄
wc 顯示文本文件的行數(shù)、字?jǐn)?shù)信息
cp 復(fù)制文件或目錄,常用參數(shù)-r, -u
mkdir 創(chuàng)建目錄
ln 在文件之間創(chuàng)建鏈接
內(nèi)部命令:
break 跳出當(dāng)前循環(huán)
continue 跳出本次循環(huán),繼續(xù)下一次循環(huán)
:空命令,相當(dāng)于true的別名
. 用來(lái)執(zhí)行shell中的命令,類型與#include
eval 允許你對(duì)參數(shù)求值,有點(diǎn)像一個(gè)而外的$,他給出一個(gè)變量值的值
exec 將當(dāng)前的shell替換一個(gè)不同的程序,其之后的代碼不會(huì)執(zhí)行
exit n 退出碼 n
export 將作為它參數(shù)的變量到處到子shell中,作為子進(jìn)程的環(huán)境變量
expr 將參數(shù)當(dāng)作表達(dá)式來(lái)求值,如簡(jiǎn)單的數(shù)學(xué)運(yùn)算
`` 對(duì)反引號(hào)內(nèi)的代碼當(dāng)作命令執(zhí)行,求的結(jié)果賦給變量
return 是函數(shù)返回
set 為shell設(shè)置參數(shù)變量 set $(date),將當(dāng)前date作為參數(shù)
shift 所有參數(shù)變量左移1個(gè)位置$3變?yōu)?2
trap 用于接收到指定信號(hào)后將要采取的行動(dòng),如INT CTRL+C。即可以設(shè)定Ctrl+C后,程序如何響應(yīng)。
unset 從環(huán)境中刪除變量或函數(shù)
find 查找文件 find [path] [option] [test] [action]
option包括find深度,是否find mount的文件夾等,test包括name, mtime,action例如print,exec
編程相關(guān)命令:
strings 打印文件中的可打印字符,如查看一個(gè)可執(zhí)行文件中的可打印字符。
nm 列出對(duì)象文件(object files)的符號(hào)列表,如查看用gcc編譯出來(lái)的可執(zhí)行文件的符號(hào)列表。
strip 刪除對(duì)象文件中的符號(hào)列表。這樣可以使得可執(zhí)行文件有更小的體積。
strace 很強(qiáng)大的命令,顯示所有由用戶空間程序發(fā)出的系統(tǒng)調(diào)用。用于調(diào)試。
從星期五晚上開始,一直在裝系統(tǒng),甚至于昨天晚上還熬通宵擺弄這東西。只是到目前為止,手頭上的這個(gè)Linux系統(tǒng)仍然問(wèn)題重重,不堪使用。明天又是新的一天,工作日,重裝系統(tǒng)的愛好就得先放放了。以下是這兩天的“成果”。
~修改Grub引導(dǎo)區(qū)失敗一次,導(dǎo)致RedHat9無(wú)法引導(dǎo),電腦無(wú)法啟動(dòng),借光驅(qū)格盤。
~Ubuntu8.04硬盤安裝一次,失敗,原因同上,Grub引導(dǎo)出錯(cuò)。
~Ubuntu8.04 Wubi安裝兩次,體驗(yàn)了傳說(shuō)中的Ubuntu,但無(wú)法上網(wǎng),基本等同于廢物了,比較適合初學(xué)者。
~RedHat9安裝一次。字體配置文件丟失,Wine無(wú)法安裝,無(wú)賴重裝,但在我的電腦上僅存1天不到。
~SuSe硬盤安裝一次,用的比較舒服,Wine成功,Qt失敗,聲音解碼器失敗,gcc編譯器向下兼容……
~U盤安裝系統(tǒng)一次,失敗,電腦無(wú)法從U盤引導(dǎo),或許是引導(dǎo)盤沒(méi)做好,但已經(jīng)沒(méi)興趣了,借光驅(qū)ing
~光盤安裝Windows2003一次,將無(wú)法引導(dǎo)的那個(gè)機(jī)器恢復(fù),oye!
~比較FC,Ubuntu,Suse,RedHat,各個(gè)的優(yōu)缺點(diǎn)。
其間出過(guò)U盤被分區(qū)無(wú)法識(shí)別的烏龍,也學(xué)會(huì)單用戶登錄,修改Grub入門,等等,但總的來(lái)說(shuō),這個(gè)周末收獲不大。目前這臺(tái)電腦上幸存三個(gè)系統(tǒng),Suse10,WinXP,Ubuntu(Wubi)。整個(gè)周末都耗在這個(gè)上面了,很無(wú)語(yǔ)。無(wú)論如何,進(jìn)一段時(shí)間再重裝這臺(tái)機(jī)器了,太無(wú)聊。生命中還有很多美好的事情可以體驗(yàn),比如睡覺!
RedHat9, 在安裝光盤中的KDE包后, 無(wú)法進(jìn)入X. 以下為解決過(guò)程.
1. 以單用戶的模式進(jìn)入Linux
參考2. 修改啟動(dòng)文件/etc/inittab, id:5:initdefalut: 將5改為3
3. 在文字模式下, startx, 嘗試啟動(dòng)X11. 報(bào)錯(cuò).
Could not open default font "fixed"
注釋掉/etc/X11/XF86Config中的 FontPath "unix/:7100", startx, 回到久違的X11
參考說(shuō)明
--------
1. 進(jìn)入grub模式下, 也可以進(jìn)入單用戶狀態(tài), 但沒(méi)有成功.
2. 以為字體丟失, 打算重新安裝系統(tǒng)盤中的XFree86包, 提示已安裝. (需要先將文件從光盤復(fù)制到其他盤)
一 基礎(chǔ)命令
掛載: mount /dev/sda /mnt/usb
卸載: umount /mnt/usb
參數(shù):
-t vfat 指定掛載盤的類型
-o 為掛載指定可選項(xiàng), 如charset等
-l 強(qiáng)制卸載磁盤
二 亂碼
在掛載時(shí)需要指定字符集. 對(duì)于U盤, mount /dev/sda /mnt/usb -o iocharset=cp936. 對(duì)于掛到Linux下的其他Winodw盤, 需要使用vim /etc/fstab命令修改配置文件, /dev/hdb7 /mnt/f vfat iocharset=cp936,defaults 0 0.
系統(tǒng)RedHat9.0, 其他系統(tǒng)或有不同, 需要找到對(duì)應(yīng)中文字符集. 如cp950, gb2312
三 大小寫
有些短文件名, 如果全大寫, 會(huì)顯示為全小寫. 影響使用. 在掛載時(shí), 加上
shortname=mixed的參數(shù)即可解決.
四 說(shuō)明
注意到, 將這些掛載磁盤的選項(xiàng)寫入到/etc/fstab中, 可在系統(tǒng)啟動(dòng)時(shí)自動(dòng)加載.
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 // 得到調(diào)用者的引用 object
alert(object.value);
}
posted @
2008-05-31 16:11 ronliu 閱讀(1950) |
評(píng)論 (0) |
編輯 收藏
1. 在window.showModalDialog的彈出對(duì)話框中,刷新父頁(yè)面。
window.opener.location.href=window.opener.location.href
在開發(fā)中,測(cè)試的數(shù)據(jù)庫(kù)服務(wù)器和正式的通常不在一起。這就涉及到數(shù)據(jù)庫(kù)連接的更新。在丟失過(guò)一次所有字段之后,發(fā)現(xiàn)是自己想復(fù)雜了。數(shù)據(jù)庫(kù)-》設(shè)置數(shù)據(jù)源位置。OK。
但我的報(bào)表中有一個(gè)以XML為數(shù)據(jù)源的子報(bào)表,在設(shè)置數(shù)據(jù)源位置時(shí),CR總是死掉,刪除這個(gè)子報(bào)表后一切正常了。原因未知。
報(bào)表更復(fù)雜一些,參見:
http://topic.csdn.net/t/20031113/17/2457889.html#
posted @
2008-05-30 16:26 ronliu 閱讀(1306) |
評(píng)論 (0) |
編輯 收藏