一、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...