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