经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
c/c++ 网络编程 bind函数
来源:cnblogs  作者:小石王  时间:2018/10/10 9:09:30  对本文有异议

网络编程 bind函数

bind的作用是确定端口号。

正常处理都是先bind,然后listen

如果不bind,直接listen,会是什么结果?

内核会自动随机分配一个端口号

例子:

  1. #include <iostream>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <unistd.h>
  5. #include <arpa/inet.h>
  6. #include <netinet/in.h>
  7. void print_ip_port(int sock){
  8. char buf[48];
  9. sockaddr_in s;
  10. socklen_t sz;
  11. sz = sizeof(s);
  12. //取得socket里面的ip地址和端口号
  13. if(getsockname(sock, (sockaddr*)&s, &sz) != 0){
  14. perror("getsockname");
  15. return;
  16. }
  17. //把bind的ip转化成字符串
  18. inet_ntop(AF_INET, &s.sin_addr, buf, sizeof(buf));
  19. std::cout << buf << ":" << ntohs(s.sin_port) << std::endl;
  20. }
  21. int main(){
  22. int s0, sock;
  23. sockaddr_in peer;
  24. socklen_t peerlen;
  25. int n;
  26. char buf[1024];
  27. //socket创建成功后,马上就调用监听listen
  28. s0 = socket(AF_INET,SOCK_STREAM,0);
  29. if(listen(s0, 5) != 0){
  30. perror("listen");
  31. return 1;
  32. }
  33. //打印出ip地址和端口号
  34. print_ip_port(s0);
  35. //等待客户端的连接
  36. peerlen = sizeof(peer);
  37. sock = accept(s0, (sockaddr*)&peer, &peerlen);
  38. if(sock < 0){
  39. perror("accept");
  40. return 1;
  41. }
  42. write(sock, "hello\n", 6);
  43. close(s0);
  44. close(sock);
  45. }

github源代码

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号