soekct實踐程式設計

2021-09-26 12:47:39 字數 3581 閱讀 8522

1.ip位址格式轉換函式

int inet_pton(int af, const char *src, void *dst);
ip位址在「點分十進位制」和「二進位制整數」之間轉換

#include #include #include #include #define ipaddr	"192.168.1.102"

// 0x66 01 a8 c0

// 102 1 168 192

// 網路位元組序,其實就是大端模式

int main(void);

ret = inet_pton(af_inet, ipaddr, &addr);

if(ret != 1)

printf("addr = 0x%x.\n", addr.s_addr);// 0x6601a8c0

}

inet_ntop 將 ipv4 和 ipv6 位址從 "二進位制" 轉換為 "點分十進位制"

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
#include #include #include #include #define ipaddr	"192.168.1.102"

// 0x66 01 a8 c0

// 102 1 168 192

// 網路位元組序,其實就是大端模式

int main(void)

; char buf[50] = ;

addr.s_addr = 0x6601a8c0;

inet_ntop(af_inet, &addr, buf, sizeof(buf));

printf("ip addr = %s.\n", buf);//ip addr = 192.168.1.102.

return 0;

}

inet_addr 將字串形式的ip位址 -> 網路位元組順序  的整型值

in_addr_t inet_addr(const char *cp);
#include #include #include #include #define ipaddr	"192.168.1.102"

// 0x66 01 a8 c0

// 102 1 168 192

// 網路位元組序,其實就是大端模式

int main(void)

2.soekct實踐程式設計

2.1 伺服器端程式編寫

(1)socket

(2)bind

(3)listen

(4)accept 返回值是乙個fd,accept正確返回就表示我們已經和前來連線我的客戶端之間建立了乙個tcp連線了,以後我們就要通過這個連線來和客戶端進行讀寫操作,讀寫操作就需要乙個fd,這個fd就由accept來返回了。

注意:socket返回的fd叫做監聽fd,是用來監聽客戶端的,不能用來和任何客戶端進行讀寫;accept返回的fd叫做連線fd,用來和連線那端的客戶端程式進行讀寫。

#include #include #include /* see notes */

#include #include //伺服器端資訊

#define serport 9003

#define seraddr "192.168.129.128" // ifconfig看到的

#define backlog 100

int main(void)

; struct sockaddr_in cliaddr = ;

char ipbuf[30] = ;

sockfd = socket(af_inet, sock_stream, 0);

if (-1 == sockfd)

printf("socketfd = %d.\n", sockfd);

seraddr.sin_family = af_inet; // 設定位址族為ipv4

seraddr.sin_port = htons(serport); // 設定位址的埠號資訊

seraddr.sin_addr.s_addr = inet_addr(seraddr); // 設定ip位址

ret = bind(sockfd, (const struct sockaddr *)&seraddr, sizeof(seraddr));

if (ret < 0)

printf("bind success.\n");

// 第三步:listen監聽埠

ret = listen(sockfd, backlog); // 阻塞等待客戶端來連線伺服器

if (ret < 0)

// 第四步:accept阻塞等待客戶端接入

clifd = accept(sockfd, (struct sockaddr *)&cliaddr, &len);

printf("連線已經建立,client fd = %d.\n", ret);

return 0;

}

2.2客戶端程式編寫

(1)socket

(2)connect

#include #include #include /* see notes */

#include #include #define seraddr "192.168.129.128" // 伺服器開放給我們的ip位址和埠號

#define serport 9003

int main(void)

; struct sockaddr_in cliaddr = ;

// 第1步:socket

sockfd = socket(af_inet, sock_stream, 0);

if (-1 == sockfd)

printf("socketfd = %d.\n", sockfd);

seraddr.sin_family = af_inet; // 設定位址族為ipv4

seraddr.sin_port = htons(serport); // 設定位址的埠號資訊

seraddr.sin_addr.s_addr = inet_addr(seraddr); // 設定ip位址

ret = connect(sockfd, (const struct sockaddr *)&seraddr, sizeof(seraddr));

if (ret < 0)

printf("connect result, ret = %d.\n", ret);

return 0;

}

all:

gcc server.c -o ser

gcc client.c -o cli

clean:

rm ser cli *.o

先執行server然後開啟另乙個終端執行client

程式設計實踐

1 輸入乙個長度小於100的字串,判斷其是否為回文串。先上 include includeusing namespace std string abc int len bool ispalindrome true 定義乙個布林變數,用來記錄字串是否是回文串 bool ispalind string ...

socket程式設計實踐

socket程式設計 1 函式說明。socket 程式設計的基本函式有 socket bind listen accept send sendto recv 以及 recvfrom 等,其中根據客戶端還是服務端,或者根據使用 tcp 協議還是 udp 協議,這些函式的呼叫流程都有所區別,這裡先對每個...

程式設計實踐週報

1 session 可以存在資料庫當中 避免伺服器崩潰時 session 中斷 express session 會話 session 支援中介軟體 connect mongo 將 session 儲存於 mongodb,需結合 express session 使用,我們也可以將 session 儲存...