学习SOCKET中,写了一个非常简单的TCP服务器和客户端的例程。客户端从服务获取时间并打印。
客户端程序执行一直出现:bind error: Cannot assign requsted addressh
下面是客户端代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#define PORT 8888
#define BUFFLEN 1024
int main(int argc, char *argv[])
{
int s;
struct sockaddr_in server;
char buff[BUFFLEN];
int n = 0;
s = socket(AF_INET, SOCK_STREAM, 0);
if(s == -1)
{
fprintf(stderr, "create socket fail, erron:%d, reason:%s\n",
errno, strerror(errno));
return -1;
}
bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = inet_addr("192.168.1.47");
int reuse = 1;
if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1)
{
return -1;
}
if(bind(s, (struct sockaddr *)&server, sizeof(server)) == -1)
{
perror("bind error: ");
return -1;
}
connect(s, (struct sockaddr *)&server, sizeof(server));
memset(buff, 0, BUFFLEN);
strcpy(buff, "TIME");
send(s, buff, strlen(buff), 0);
memset(buff, 0, BUFFLEN);
n = recv(s, buff, BUFFLEN, 0);
if(n > 0)
{
printf("TIME:%s\n", buff);
}
close(s);
return 0;
}
后来发现在TCP客户端程序调用了bind函数,而ip 192.168.1.47是服务器IP,所以一直出现bind error。
改正:
1.直接去掉bind函数
2.TCP客户端也可以BIND,可参考:https://blog.csdn.net/stpeace/article/details/45001255