无法为绑定套接字分配请求的地址。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法为绑定套接字分配请求的地址。相关的知识,希望对你有一定的参考价值。
我检查了我的代码,但我不知道为什么程序不能绑定socket.我试了很多ip和端口(甚至127.0.0.1),但还是不行......这是我使用的代码。
//error message
void error (const char *msg)
{
perror(msg);
exit(1);
}
int main ()
{
int sock, cli_sock, portno;
char buffer[1024];
char response[18432];
struct sockaddr_in serv_addr, cli_addr;
socklen_t cli_len;
//creating socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0)
error("Error opening socket");
bzero ((char *) &serv_addr, sizeof(serv_addr));
//giving port number
portno = 50005;
//giving ip address
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(portno);
//bind socket
if(bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) != 0)
error("Binding failed.");
//listen
listen(sock, 5);
cli_len = sizeof(cli_addr);
//accept
cli_sock = accept(sock, (struct sockaddr *) &cli_addr, &cli_len);
if(cli_sock != 0)
error("Error on accepting");
}
(这只是socket部分的服务器代码,只是为了更多的信息,我的客户端版本是Windows的,服务器版本是Linux的)
这是我运行程序时的输出。
Binding failed.: Cannot assign requested address
答案
对于TCP来说,客户机和服务器的设置是:
服务器:
- socket(创建监听套接字)
- 绑定(监听Socker到本地地址:端口)
- 监听
(接受循环头)
- accept (让监听套接字等待输入的连接,连接成功后返回接受的套接字)
- 读写(从接受的套接字!)、关闭(接受的套接字;可选
- 关闭(接受的插座;可选)
- 闭合
襻底
- 关机
- 闭合
客户端。
- socket
- 绑定(本地地址:端口,可选,不常用)
- 连线(到远程地址:端口,那些服务器被绑定的)
- 读写
- 关机
- 密切
以上是关于无法为绑定套接字分配请求的地址。的主要内容,如果未能解决你的问题,请参考以下文章
socket_bind():无法绑定地址 [99](Amazon EC2 上的 Ubuntu)