欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c/c++ 网络编程 bind函数

程序员文章站 2022-05-12 17:04:59
网络编程 bind函数 bind的作用是确定端口号。 正常处理都是先bind,然后listen 如果不bind,直接listen,会是什么结果? 内核会自动随机分配一个端口号 例子: c++ include include include include include include void p ......

网络编程 bind函数

bind的作用是确定端口号。

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

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

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

例子:

#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>

void print_ip_port(int sock){
  char buf[48];
  sockaddr_in s;
  socklen_t sz;

  sz = sizeof(s);

  //取得socket里面的ip地址和端口号
  if(getsockname(sock, (sockaddr*)&s, &sz) != 0){
    perror("getsockname");
    return;
  }

  //把bind的ip转化成字符串
  inet_ntop(af_inet, &s.sin_addr, buf, sizeof(buf));
  std::cout << buf << ":" << ntohs(s.sin_port) << std::endl;
}
int main(){
  int s0, sock;
  sockaddr_in peer;
  socklen_t peerlen;
  int n;
  char buf[1024];

  //socket创建成功后,马上就调用监听listen
  s0 = socket(af_inet,sock_stream,0);
  if(listen(s0, 5) != 0){
    perror("listen");
    return 1;
  }

  //打印出ip地址和端口号
  print_ip_port(s0);

  //等待客户端的连接
  peerlen = sizeof(peer);
  sock = accept(s0, (sockaddr*)&peer, &peerlen);
  if(sock < 0){
    perror("accept");
    return 1;
  }

  write(sock, "hello\n", 6);

  close(s0);
  close(sock);
  
}

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

c/c++ 网络编程 bind函数

本人微信:xiaoshitou5854