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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Socket网络编程】1.bind()和 INADDR_ANY 解析

發(fā)布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Socket网络编程】1.bind()和 INADDR_ANY 解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

bind()和 INADDR_ANY 解析

linux網絡編程之UDP通信 http://blog.sina.com.cn/s/blog_c2f250bd0101ii14.html 該博客講了tcp和udp的一些常用參數

bind()解析

當使用socket()創(chuàng)建套接字后,只賦予其所使用的協(xié)議,并未分配地址。

在接受其它主機的連接前,必須先調用bind()為套接字分配一個地址。

bind() 一般用于服務器端,將一個套接字與一個套接字地址結構相關聯,比如,關聯一個指定的本地端口和IP地址。

bind()有三個參數:

  • sockfd, 表示使用bind函數的套接字描述符
  • my_addr, 指向sockaddr結構(用于表示所分配地址)的指針
  • addrlen, 用socklen_t字段指定了sockaddr結構的長度

如果發(fā)生錯誤,函數返回值為-1,否則為0。

  • 原型

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

一般接收端要使用bind()。發(fā)送端不需使用bind()。

bind() 一般用于服務器(接收)端,將一個套接字與一個套接字地址結構相關聯,比如,關聯一個指定的本地端口和IP地址。

  • 作為接收端,當你調用bind()函數綁定IP時使用【INADDR_ANY】,表明接收來自任意IP、任意網卡的發(fā)給指定端口的數據。

  • 作為發(fā)送端,當你調用bind()函數綁定IP時使用【INADDR_ANY】,表明使用網卡號最低的網卡進行發(fā)送數據,也就是UDP數據廣播。

  • 對于sendto()函數,成功則返回實際傳送出去的字符數,失敗返回-1,錯誤原因存于errno中。

  • 對于recvfrom()函數,成功則返回接收到的字符數,失敗則返回-1,錯誤原因存于errno中。 recvfrom()函數不收到數據是不會返回的,而要一直阻塞。若不要阻塞,可用非阻塞模式來接收數據。

  • 錯誤碼參考博客 https://blog.csdn.net/qishiai819/article/details/80093659

服務器端 需要bind()綁定ip地址和端口
客戶端 可以不需要bind()綁定ip地址和端口,但是也可以綁定

如果服務器程序就緒后一上來就要發(fā)送數據給客戶端,那么服務器就需要知道客戶端的地址信息和端口,那么就不能讓客戶端的地址信息和端口號由客戶端所在操作系統(tǒng)分配,而是要在客戶端程序指定了。
怎么指定?那就是用bind()函數。 https://blog.csdn.net/qq_29344757/article/details/71616748

在多播中,無論是發(fā)送還是接收端都必須綁定一個本地地址(需要使用bind()函數),這個地址就是多播通信時處理信息的端口

【socket綁定的ip為 INADDR_ANY 的意義】

https://blog.csdn.net/qq_26399665/article/details/52932755

【INADDR_ANY】 這個宏能夠讓程序員在不知道本機IP地址的情況下,使用它來代表本機所有接口的IP地址。也就是說,使用這個宏作為監(jiān)聽地址的話,不管本機有多少個接口,socket都會監(jiān)聽。
舉個例子,假設一個主機有inter1,inter2,,inter3三個接口,如果一個socket綁定了INADDR_ANY的地址和8000的端口,那么,從客戶端過來的一個UDP包到達該主機,不管客戶端connect的是inter1,inter2,inter3中的哪個地址,都會被該socket接收到。如果此時主機還要再建立一個新的socket,使用inter1接口和端口8000,將會失敗,因為這個端口和地址已經被第一個socket監(jiān)聽了。

總結

以上是生活随笔為你收集整理的【Socket网络编程】1.bind()和 INADDR_ANY 解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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