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); }