ntohl 與 htonl 相反的過程
ntohs 與htons 相反的過程
inet_addr(char***) 點分十進位制轉化為整型
inet_nota(int) 整型轉化為點分十進位制
主機位元組序 和 網路位元組序
當主機位元組序埠號位為 0x1234 那麼 網路位元組序就為 0x12 0x34
如果是0x86 cpu電腦 他的網路位元組序就是 0x34 0x12
當時用socket函式時,linux核心會自動建立乙個套接字
**
//所需要的的標頭檔案
#include#include#include#include#include#include
socket資訊結構體
struct sockaddr_in
;struct sin_addr
;
socket建立
//建立socket 返回得到檔案描述符
//af_inet ipv4協議簇
//sock_stream 資料流 安全可靠
//ipproto_tdp 使用tcp協議
int sock =
socket
(af_inet,sock_stream,ipproto_tcp)
;
socket繫結
struct sockaddr_in local;
local.sin_family = af_inet;
local.sin_port =
htons
(8888);
local.sin_addr.s_addr =
htonl
(inaddr_any)
;//inaddr_any本機隨機位址
bind
(sock,
(struct sockaddr*
)&local,
sizeof
(local)
);
監聽
listen
(sock,
(int
)size)
;//size是監聽的最大個數
等待接收
struct sockaddr_in peer;
//用來接收客戶端的資訊
socklen_t len =
sizeof
(peer)
;//阻塞等 待接收 並獲取客戶端資訊
//fd是客戶端的檔案描述符
int fd =
accept
(sock,
(struct sockaddr*
)&peer,
&len)
;
資料收發
//傳入客戶端檔案描述符進行收發資料
write
(fd,
(void
*)buf,
sizeof
(buf));
//傳送
read
(fd,
(void
*)buf,
sizeof
(buf));
//接收
socket建立
int sock =
socket
(af_inet,sock_stream,0)
;
初始化socket
struct sockaddr_in remote;
remote.sin_family = af_inet;
remote.sin_port =
htons
(8888);
remote.sin_addr.s_addr =
htonl
(inaddr_any)
;
連線
connect
(sock,
(struct sockaddr*
)&remote,
sizeof
(remote)
);
資料收發
write
(sock,
(void
*)buf,
sizeof
(buf));
read
(sock,
(void
*)buf,
sizeof
(buf)
);
int sock =
socket
(af_inet,sock_dgram,0)
;struct sockaddr_in local;
local.sin_family = af_inet;
local.sin_port =
htons
(8888);
local.sin_addr.s_addr =
htoml
(inaddr_any)
;bind
(sock,
(struct sockaddr_in*
)&local,
sizeof
(local));
struct sockaddr_in peer;
recvfrom
(sock,
(void
*)buf,
sizeof
(buf),0
,(struct sockaddr*
)&peer,
sizeof
(peer));
sendto
(sock,
(void
*)buf,
sizeof
(buf),0
(struct sockaddr*
)&peer,
sizeof
(peer)
);
udp客戶端不需要服務端的bind即可 並且sendto和recvfrom的物件socket為服務端的socket
setsockopt
(socket s,
int level,
int optname,
const
char
*optval,
int optlen)
;getsockopt
(socket s,
int level,
int optname,
const
char
*optval,
int optlen);/*
s表示socket檔案描述符
level表示套接字級別
optname表示使用者指定的選項名稱
optval 要修改指定選項的值
optlen optval的長度
*/
需要用setsocketopt將套接字加入組播要利用到結構體struct ip_mreq其他與廣播一樣
組播的位址從"224.0.1.0"~"238.255.255.255"
struct ip_mreq mreq;
mreq.imr_inte***ce.s_addr=
htonl
(inaddr_any)
;mreq.imr_multiaddr.s_addr =
inet_addr
('224.0
.1.88")
;setsockopt
(s,ipproto_ip,ip_add_membership,
&mreq,
sizeof
(mreq)
);
linux c socket程式設計
這裡主要是 網上有原理 socket 有同步,非同步之分,我這是個同步的,同步又有阻塞和非阻塞之分,這的非阻塞是用select 函式實現的 客戶端 include include include include include include include include include incl...
linux C socket程式設計
這是乙個關於socket的題 要求你自己寫乙個socket程式,然後解析客戶端從瀏覽器位址列提交的資料。要求 在瀏覽器中輸入http localhost 8500 後,你的socket程式向瀏覽器返回乙個網頁,以後就用這個網頁向你寫得這個socket程式提交資料,你的socket程式負責解析這些資料...
linux C socket 程式設計(二)
linux c socket 程式設計 一 linux c socket 程式設計 二 linux c socket 程式設計 三 tcpserver socket bind listen accept write read send recv close tcpclient socket conn...