Socket Kenney 新浪部落格

2021-10-10 12:02:14 字數 3728 閱讀 6376

1. wsastartup

在使用winsock api之前,必須呼叫wsastartup,呼叫成功返回0。

int wsastartup(word v, (lpwsadata)& wd)

word v: socket版本,低位元組為主版本號,高位元組為副版本號。eg. v1.1 = 0x0101; v2.0 = 0x0002。

(lpwsadata)& wd: 指向wsadata結構。

wsadata結構

struct wsadata

2. wsacleanup

結束使用winsock時呼叫,呼叫成功返回0。

int wsacleanup()

3. socket

socket是乙個通訊的埠,返回-1表示失敗,否則返回套介面的描述字

socket socket(int af, int type, int protocol)

int af: 套介面所用位址族。af_inet tcp/ip位址; af_unix unix位址。

int type: 套介面型別。sock_stream 資料流套介面,對應tcp協議;sock_dgram 資料流套介面,對應udp協議。

int protocol: 套介面所用協議。ipproc_tcp使用tcp/ip的tcp協議; ipproc_udp使用tcp/ip的udp協議。

4. 主機位址標識的資料結構

struct sockaddr

struct socketaddr_in

struct in_addr

void setsockaddr(struct socketaddr_in* a, word port, char* ip)

htons(): 把16bit的數字從主機位元組順序轉換到網路位元組順序

inet_addr(): 把乙個ip位址格式"a.b.c.d"轉換成32bit的網路位元組順序

將ip位址和埠號與所建立的socket號聯絡起來,返回值0表示呼叫成功

int bind(socket s, struct sockaddr far* name, int len)

socket s: //待**

socket

struct sockaddr far* name: //賦予socket的主機位址標識

int len: //name的長度

7. sendto

向一指定目的地傳送資料

int sendto(socket s, char* buf, int buflen, int flags, struct sockaddr far* to, int tolen);

socket s   源套介面

char* buf   待傳送資料的緩衝區

int buflen   緩衝區中資料的長度

int flags   呼叫方式標誌位,一般取0

struct sockaddr far* to   指向目的套介面的主機位址

int tolen 目的套介面主機位址的長度

8. recvfrom

從乙個套介面接收資料

int recvfrom(socket s, char* buf, int len, int flags, struct sockaddr far* from, int fromlen);

socket s   接收套介面

char* buf   接收資料的緩衝區

int len   緩衝區中資料的長度

int flags   呼叫方式標誌位,一般取0

struct sockaddr far* from   獲取傳送套介面的主機位址

int fromlen   傳送套介面的主機位址的長度

9. send

向乙個套介面傳送資料

int send(socket s, char* buf, int len, int flags);

socket s   傳送套介面

char* buf   傳送資料的緩衝區

int len   緩衝區中資料的長度

int flags   呼叫方式標誌位,一般取0

10. recv

從乙個套介面接收資料

int recvfrom(socket s, char* buf, int len, int flags);

socket s   接收套介面

char* buf   接收資料的緩衝區

int len   緩衝區中資料的長度

int flags   呼叫方式標誌位,一般取0

11. connect

建立連線,返回0表示成功

int connect(socket s, struct sockaddr far * name, int namelen);

socket s   指定用於連線的套接字控制代碼

struct sockaddr far * name   指定要連線到的伺服器的ip位址與埠

int namelen   sockaddr結構的長度

12. listen

設定等待連線狀態,返回0表示成功

int listen(socket s, int backlog);

socket s   被監聽的埠

int backlog

13. accept

接受連線請求,返回值為socket只負責通訊不負責連線

socket accept(socket s, struct sockaddr far * addr, int far * addrlen);

socket s   監聽的埠,只負者連線不負責通訊

struct sockaddr far * addr   遠端連線的位址與埠

int far * addrlen

14. select

監視我們需要監視的檔案描述符的變化情況讀寫或是異常

int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,struct timeval* timeout);

int nfds   集合中所有檔案描述符的範圍,即所有檔案描述符的最大值加1

fd_set* readfds   指向fd_set結構的指標,這個集合中應該包括檔案描述符,我們是要監視這些檔案描述符的讀變化的,即我們關心是否可以從這些檔案中讀取資料了,如果這個集合中有乙個檔案可讀,select就會返回乙個大於0的值,表示有檔案可讀,如果沒有可讀的檔案,則根據timeout引數再判斷是否超時,若超出timeout的時間,select返回0,若發生錯誤返回負值。可以傳入null值,表示不關心任何檔案的讀變化

fd_set* writefds   指向fd_set結構的指標,這個集合中應該包括檔案描述符,我們是要監視這些檔案描述符的寫變化的,即我們關心是否可以向這些檔案中寫入資料了,如果這個集合中有乙個檔案可寫,select就會返回乙個大於0的值,表示有檔案可寫,如果沒有可寫的檔案,則根據timeout引數再判斷是否超時,若超出timeout的時間,select返回0,若發生錯誤返回負值。可以傳入null值,表示不關心任何檔案的寫變化

fd_set* exceptfds   同上面兩個引數的意圖,用來監視檔案錯誤異常

struct timeval* timeout   select的超時時間

15. closesocket

關閉socket

int closesocket(socket s);

新浪微博授權

一.建立應用 2.進入我的應用 3.建立應用 二.oauth的授權流程 你所開發的應用需要的流程如下 2.得到request token後重定向使用者到服務商的授權頁面 3.如果使用者選擇授權你的應用,用request token向服務商請求換取access token 4.得到access tok...

模擬新浪微博

1.專案效果圖 主要 如下 android layout width match parent android layout height match parent android padding 10dip android orientation vertical 2 獲取xml資源 在andro...

新浪微博的布局

import mjtabbaritem.h implementation mjtabbaritem id initwithframe cgrect frame itemdesc mjtabbaritemdesc desc return self pragma mark 覆蓋父類的2個方法 pragm...