linux 聊天室 知識點

2021-07-29 05:25:33 字數 2898 閱讀 3870

一、具體操作

1.登陸虛擬機器(ubutu)

賬號 root 密碼root

2.開啟多個視窗

快捷鍵 ctrl+alt+t

3.開啟伺服器

./server

4.設定本地ip位址

ifconfig eth0 192.168.1.1

檢視ip位址 ifcofig

將網絡卡禁用

ifconfig eth0 down

將網絡卡啟用

ifconfig eth0 up

5.開啟客戶機

./client 192.168.1.1

6.開啟資料庫檔案

cd ./output

開啟檔案

sqlite3 chatroom.db

顯示檔案內容

select * from mytable;

退出sqlite3,回來shell介面

.quit

7.開啟編輯檔案

vim main.c

往前追蹤 ctrl+]    

往回退   ctrl+t

二、網路程序之間的通訊 

tcp/ip協議的應用程式通常採用應用程式設計介面 套接字socket

1.網路三元組 

ip位址,協議,埠

(網路層的「ip位址」可以唯一標識網路中的主機,

而傳輸層的「協議+埠」可以唯一標識主機中的應用程式(程序))

2.socket概念

socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面

(建立了socket,就像與網路開了乙個通道,各網路的主機可以通過通道傳輸資料)。

3.套接字描述符

3.1 其實就是乙個整數,我們最熟悉的控制代碼是0、1、2三個,0是標準輸入,1是標準輸出,

2是標準錯誤輸出。0、1、2是整數表示的,對應的file *結構的表示就是stdin、stdout、stderr

3.2 只要兩個網路程序ip位址,埠號相同,使他們連線成功,便可以根據套接字描述符

來讀寫資料。

3.3 作業系統就建立乙個檔案描述符提供給應用程式訪問檔案。從應用程式的角度看,

檔案描述符是乙個整數,應用程式可以用它來讀寫檔案。

4.檔案描述符和檔案指標的區別:

檔案描述符:在linux系統中開啟檔案就會獲得檔案描述符,它是個很小的正整數。

每個程序在pcb(process control block)中儲存著乙份檔案描述符表,

檔案描述符就是這個表的索引,每個表項都有乙個指向已開啟檔案的指標。

檔案指標:c語言中使用檔案指標做為i/o的控制代碼。檔案指標指向程序使用者區中的乙個被

稱為file結構的資料結構。file結構包括乙個緩衝區和乙個檔案描述符。

而檔案描述符是檔案描述符表的乙個索引,因此從某種意義上說檔案指標

就是控制代碼的控制代碼(在windows系統上,檔案描述符被稱作檔案控制代碼)。

5.socket建立鏈結的過程

伺服器:

伺服器端先初始化socket

然後與埠繫結(bind)

對埠進行監聽(listen)

呼叫accept阻塞,等待客戶端連線

write()

read()

close()

客戶機:

客戶端初始化乙個socket

連線伺服器(connect)

write()

read()

close()

通常伺服器在啟動的時候都會繫結乙個眾所周知的位址(如ip位址+埠號),

用於提供服務,客戶就可以通過它來接連伺服器;而客戶端就不用指定,有繫

統自動分配乙個埠號和自身的ip位址組合。這就是為什麼通常伺服器端在listen

之前會呼叫bind(),而客戶端就不會呼叫,而是在connect()時由系統隨機生成乙個。

6.位元組序

主機位元組序:

我們平常說的大端和小端模式:不同的cpu有不同的位元組序型別,

這些位元組序是指整數在記憶體中儲存的順序,這個叫做主機序。引用標準的big-endian

和little-endian的定義如下:

a) little-endian就是低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體

的高位址端。

b) big-endian就是高位位元組排放在記憶體的低位址端,低位位元組排放在記憶體的高位址端。

網路位元組序:

4個位元組的32 bit值以下面的次序傳輸:首先是0~7bit,其次8~15bit,

然後16~23bit,最後是24~31bit。這種傳輸次序稱作大端位元組序。由於tcp/ip首部中

所有的二進位制整數在網路中傳輸時都要求以這種次序,因此它又稱作網路位元組序。

7.伺服器的兩種套接字

監聽套接字: 監聽套接字正如accept的引數sockfd,它是監聽套接字,在呼叫listen

函式之後,是伺服器開始呼叫socket()函式生成的,稱為監聽socket描

述字(監聽套接字)

連線套接字:乙個套接字會從主動連線的套接字變身為乙個監聽套接字;而accept函

數返回的是已連線socket描述字(乙個連線套接字),它代表著乙個網路

已經存在的點點連線。

7.1 乙個伺服器通常通常僅僅只建立乙個監聽socket描述字,它在該伺服器的生命週期內

一直存在。核心為每個由伺服器程序接受的客戶連線建立了乙個已連線socket描述字,

當伺服器完成了對某個客戶的服務,相應的已連線socket描述字就被關閉。

7.2 自然要問的是:為什麼要有兩種套接字?

原因很簡單,如果使用乙個描述字的話,那麼它的功能太多,使得使用很不直觀,

同時在核心確實產生了乙個這樣的新的描述字。

連線套接字socketfd_new 並沒有占用新的埠與客戶端通訊,依然使用的是與監

聽套接字socketfd一樣的埠號

linux聊天室知識點整理

標籤 linuxc 函式原型 int pthread create pthread t tid,const pthread attr t tattr,void start routine void void arg 功能 建立乙個新的執行緒,並將執行緒加入當前程序返回值 在呼叫成功完成之後返回零。其...

mysql 聊天室 聊天室php mysql 六

聊天室php mysql 六 相應的 資料庫 phpmyadmin mysql dump 主機 localhost 3306 資料庫 study28 資料表的結構 chat user create table chat user userid varchar 20 not null,passwd v...

聊天室程式

伺服器 include include include include include include include include define servport 8081 伺服器端口號 define bufsize 200 最大傳輸量 int main int args,char argv s...