Linux網路程式設計相關操作

2021-10-24 15:32:12 字數 3215 閱讀 5315

一、linux網路程式設計基礎知識

tcp/udp對比埠號的作用

一台擁有ip位址的主機可以提供許多服務,比如web服務、ftp服務、smtp服務等,這些服務完全可以通過乙個ip位址來實現。那麼主機是怎麼樣區分不同的網路服務呢?顯然不能只靠ip位址,因為ip位址與網路服務的關係是一對多的關係。實際上是通過 「ip位址+埠號」 來區分不同的服務的。埠提供了一種訪問通道,伺服器一般都是通過知名埠號來識別的。例如,對於每個tcp/ip實現來說,ftp伺服器的tcp埠號都是21,每個telnet伺服器的tcp埠號都是23,每個tftp(簡單檔案傳輸協議)伺服器的udp埠號都是69。

socket概念

linux中的網路程式設計是通過socket介面來進行的。socket是一種特殊的i/o介面,它也是一種檔案描述符。它是一種常用的程序之間通訊機制,通過它不僅能實現本地機器上的程序之間的通訊,而且通過網路能夠在不同機器上的程序之間進行通訊。

每乙個socket都用乙個半相關描述來表示;乙個完整的套接字則用乙個相關描述來表示。socket也有乙個類似於開啟檔案的函式呼叫,該函式返回乙個整型的socket描述符,隨後的連線建立、資料傳輸等操作都是通過socket來實現的。

socket資訊資料結構

(現如今使用較少了)

struct sockaddr

;struct sockaddr_in s_addr;

struct sockaddr_in c_addr;

if(argc !=3)

memset

(&s_addr,0,

sizeof

(struct sockaddr_in));

memset

(&c_addr,0,

sizeof

(struct sockaddr_in));

s_fd=

socket

(af_inet,sock_stream,0)

;if(s_fd==-1

) s_addr.sin_family = af_inet;

s_addr.sin_port =

htons

(atoi

(ar**[2]

));//,轉換為網路位元組序;注意轉換成整型數,將字串轉換成整型數

// s_addr.sin_addr.s_addr=inet_aton("127.0.0.1");//yong fa chuowu

// int inet_aton(const char *cp, struct in_addr *inp);

inet_aton

(ar**[1]

,&s_addr.sin_addr)

;//將字串形式的位址轉為網路能識別的形序,賦給&s_addr.sin_addr

// int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

bind

(s_fd,

(struct sockaddr *

)&s_addr,

sizeof

(struct sockaddr_in));

listen

(s_fd,10)

;//int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

int clen=

sizeof

(struct sockaddr)

;while(1

)printf

("get connect: %s\n"

,inet_ntoa

(c_addr.sin_addr));

//把網路格式的位址轉為字串形式,在服務端顯示客戶端的位址if(

fork()

==0)}

//先獲取客戶端的輸入,若無資料的輸入則阻塞

while(1

)else

}break;}

}return0;

}客戶端

#include

#include

/* see notes */

#include

//#include

#include

#include

#include

#include

//#include

intmain

(int argc,

char

**ar**)

;struct sockaddr_in c_addr;

if(argc !=3)

memset

(&c_addr,0,

sizeof

(struct sockaddr_in));

c_fd=

socket

(af_inet,sock_stream,0)

;if(c_fd==-1

) c_addr.sin_family = af_inet;

c_addr.sin_port =

htons

(atoi

(ar**[2]

));// s_addr.sin_addr.s_addr=inet_aton("127.0.0.1"); //inet_aton()用法錯誤

// int inet_aton(const char *cp, struct in_addr *inp);

inet_aton

(ar**[1]

,&c_addr.sin_addr)

;// int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);if(

connect

(c_fd,

(struct sockaddr *

)&c_addr,

sizeof

(struct sockaddr))==

-1)while(1

)}//先執行父程序,即一下語句

while(1

)else}}

return0;

}

linux網路程式設計相關

一 設定socket收發超時時間 struct timeval timeout 3s int ret setsockopt sock fd,sol socket,so sndtimeo,constchar timeout,sizeof timeout int ret setsockopt sock ...

網路程式設計相關

http協議中get和post有什麼區別,cookie 和 essions有什麼不同和聯絡?音未公司 get是從伺服器上獲取資料,post是向伺服器傳送資料 get相對於post的話不安全,傳輸的資料一般明文顯示在 中,post一般使用者表單的提交,資料通過 l加密傳輸 get傳送的資料有限制,不能...

Linux網路相關

功能 語法啟動網絡卡 ifup 網絡卡名 關閉網絡卡 ifdown 網絡卡名 重啟單個網絡卡 ifdown ens33 ifup ens33 檢視網絡卡是否連線 mii tool 網絡卡名 檢視主機名 hostname 更改主機名 重新登入即可永久生效 hostnamectl set hostnam...