linux c socket程式設計

2021-10-12 07:06:20 字數 3958 閱讀 4433

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