日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈socket网络编程函数参数(二)

發布時間:2023/11/30 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈socket网络编程函数参数(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

bind()函數

bind()函數把一個地址族中的特定地址賦給socket。
例如對應AF_INET、AF_INET6就是把一個ipv4或ipv6地址和端口號組合賦給socket。

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

參數解析

  • sockfd:即socket描述字,它是通過socket()函數創建了,唯一標識一個socket。bind()函數就是將給這個描述字綁定一個名字。
  • addr:一個const struct sockaddr *指針,指向要綁定給sockfd的協議地址。這個地址結構根據地址創建socket時的地址協議族的不同而不同,
    ipv4對應的是:
    解析:https://blog.csdn.net/csdn_kou/article/details/81452166
struct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */in_port_t sin_port; /* port in network byte order */struct in_addr sin_addr; /* internet address */ };/* Internet address. */ struct in_addr {uint32_t s_addr; /* address in network byte order */ };

addrlen:對應的是地址的長度。

listen()

如果作為一個服務器,在調用socket()、bind()之后就會調用listen()來監聽這個socket,如果客戶端這時調用connect()發出連接請求,服務器端就會接收到這個請求。

int listen(int sockfd, int backlog);
  • listen函數的第一個參數即為要監聽的socket描述字,第二個參數為相應socket可以排隊的最大連接個數。
  • socket()函數創建的socket默認是一個主動類型的,listen函數將socket變為被動類型的,等待客戶的連接請求。

connect()函數

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • connect函數的第一個參數即為客戶端的socket描述字
  • 第二參數為服務器的socket地址
  • 第三個參數為socket地址的長度。
  • 客戶端通過調用connect函數來建立與TCP服務器的連接。

accept()函數

概念

TCP服務器端依次調用socket()、bind()、listen()之后,就會監聽指定的socket地址了。TCP客戶端依次調用socket()、connect()之后就向TCP服務器發送了一個連接請求。TCP服務器監聽到這個請求之后,就會調用accept()函數取接收請求,這樣連接就建立好了。之后就可以開始網絡I/O操作了,即類同于普通文件的讀寫I/O操作。

關鍵點

*accept()會創建一個新的socket,并且正是這個新的socket會與執行connect()的對象socket進行連接。

返回值

accept()的返回結果是已經連接的socket文件描述符
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); //返回連接connect_fd

用法

int newfd = -1;struct sockaddr_in cli_addr;newfd = accept(lst_fd, (struct sockaddr*)&cli_addr, &len);if (newfd < 0) {perror("accept error");continue;} ---------------------------------------------------------------socklen_t len = sizeof(struct sockaddr_in);int lst_fd = -1;lst_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (lst_fd < 0) {perror("socket error");return -1;}
  • 參數sockfd就是上面解釋中的監聽套接字,這個套接字用來監聽一個端口,當有一個客戶與服務器連接時,它使用這個一個端口號,而此時這個端口號正與這個套接字關聯。當然客戶不知道套接字這些細節,它只知道一個地址和一個端口號。
  • 參數addr
    這是一個結果參數,它用來接受一個返回值,這返回值指定客戶端的地址,當然這個地址是通過某個地址結構來描述的,用戶應該知道這一個什么樣的地址結構。如果對客戶的地址不感興趣,那么可以把這個值設置為NULL。
  • 參數len
    如同大家所認為的,它也是結果的參數,用來接受上述addr的結構的大小的,它指明addr結構所占有的字節個數。同樣的,它也可以被設置為NULL。

close()函數

在服務器與客戶端建立連接之后,會進行一些讀寫操作,完成了讀寫操作就要關閉相應的socket描述字

#include <unistd.h> int close(int fd);

總結

以上是生活随笔為你收集整理的浅谈socket网络编程函数参数(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线观看免费 | 少妇影院在线观看 | 国产精品久久久久久久久久久久久久久久久 | 日本福利在线观看 | 中文字幕一区二区在线播放 | a天堂中文 | 36d大奶| 91偷拍一区二区三区精品 | 国产麻豆乱码精品一区二区三区 | 欧美一线高本道 | 99riav在线| 午夜一区不卡 | 青青草免费在线观看 | 91视频88av| 在线精品小视频 | 可以在线观看av的网站 | 丁香久久婷婷 | 奇米四色在线视频 | 高h全肉污文play带道具 | 在线播放黄色网址 | 亚洲色图 在线视频 | 美女扒开尿口让男人桶 | 亚洲 美腿 欧美 偷拍 | 成人性爱视频在线观看 | 午夜丁香网 | 国产精品久久久久久妇女6080 | 亚洲精品国产乱伦 | 国产偷人 | 99精品国自产在线 | 青青青国产精品一区二区 | 国产三级麻豆 | 无码人妻精品一区二区中文 | 91sao | 粉嫩av网站 | 亚洲美女视频在线 | 男人插入女人下面的视频 | 自拍偷拍综合 | 96超碰在线 | 理论片国产 | 成人中文字幕在线观看 | 麻豆视频免费网站 | 91麻豆蜜桃一区二区三区 | 草av| 国产乱人乱精一区二视频国产精品 | 欧美性猛交xxxx乱大交 | 亚洲精品五月天 | 天天激情站 | 国产三级视频网站 | 欧美91av| 蜜臀av在线播放 | 欧美日韩乱国产 | 一区二区三区观看 | 亚洲性图一区二区三区 | 黑人性视频| 欧美一区自拍 | 偷拍一区二区三区 | hitomi一区二区三区精品 | 亚久久| 亚洲天堂男人的天堂 | 国产精品30p | 亚洲va欧美va国产综合久久 | 一区二区免费在线视频 | 嫩草影院菊竹影院 | 国产一区二区成人 | 幸福,触手可及 | 古代黄色一级片 | 欧美一区二区三区四区在线观看 | 999精品国产 | 国产成人片 | 少妇做爰免费理伦电影 | 国产国语亲子伦亲子 | 欧美日本一区二区 | www.97av| 日本黄频 | 桥本有菜aⅴ一区二区三区 在线午夜电影 | 成人免费xxxxx在线观看 | 奇米久久久 | 亚洲 小说区 图片区 | 精品人妻一区二区色欲产成人 | 欧美高清一区二区三区四区 | 久久精品女人 | 乱淫的女高中暑假调教h | 天堂中文在线免费观看 | 国产爆操视频 | 免费毛片网站在线观看 | 久久精品www人人爽人人 | 解开乳罩喂领导吃奶 | 黑人精品一区二区三区不 | 深夜福利一区二区三区 | 性少妇videosexfre | 欧美一级片免费观看 | 欧美精品久久久久久久免费 | 激情久久久久久 | 欧美乱淫视频 | 亚洲成人午夜电影 | 重囗味sm一区二区三区 | 青青青在线 | 久久疯狂做爰流白浆xx | 18无码粉嫩小泬无套在线观看 |