一:问题:刚开始学习Linux网络编程,第一次使用bind函数出现Cannot assign requested address,错误。在网上找了很多帖子但是都没有解决。
二:
问题一:也就是网上大部分说的:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端 口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”。是客户端的问题不是服务器端的问题。

方法一:通过netstat -nap查看当前的状态,的确看到很多TIME_WAIT状态的连接。可以通过pid 用命令 kill -9  pid,杀死处于TIME_WAIT状态的进程。问题二:因为我的测试是以window当服务器,Ubuntu当客户端,所以需

要用到桥接技术,让两个系统在一个网段里面。那么出现bind的错误很有可能是你的网络的问题。我自己在测试的时候,试了很多种方法,还能ping通,但是网络这一块还是有点问题,还是出现bind错误。

解决二:在虚拟机里面,①编辑->虚拟网络编辑器->还原默认设置。②完成后重新选择,网络桥接模式。③进入Ubuntu,命令ifconfig(查看网卡),sudo ifconfig ens33 up (算是打开网卡吧我也不懂),sudo dhclient(动态分配一个IP)。这样就欧克了,就会发现,在同一个网段。就可以使用bind了。
下面是我写的简单代码,看一下吧。

服务器端:

/**********
1、在服务器端接受消息时知道对方的IP和端口提示:bind出现:Address already in use    方法:netstat -nap查看 用kill -9 pid杀死
2、利用TCP实现文件传输
**********/#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <strings.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>int main(void)
{//建立套接字int server_fd=socket(AF_INET,SOCK_STREAM,0);if(server_fd==-1){perror("socket:");return -1;}//绑定本机的IP和端口struct sockaddr_in saddr;saddr.sin_family=AF_INET;saddr.sin_port=htons(7777);    //设置端口saddr.sin_addr.s_addr=inet_addr("192.168.199.205"); //点分十进制-》换成32位的网络字节序二进制值int ret=bind(server_fd,(struct sockaddr *)&saddr,sizeof(saddr));if(ret==-1){perror("bind:");return -1;}//设置监听套接字(设置同时来链接数)ret=listen(server_fd,4);      //server_fd设置为监听套接字if(ret==-1){perror("listen:");return -1;}//等待对端链接struct sockaddr_in client_buf;socklen_t len = sizeof(client_buf);int client_fd = accept(server_fd,(struct sockaddr *)&client_buf,&len);   //成功返回对端的文件描述符if(-1 == client_fd){perror("accept:");return -1;}//显示对端的ip和端口printf("对端的ip为:%s\n",inet_ntoa(client_buf.sin_addr));printf("对端的port为:%d\n",ntohs(client_buf.sin_port));//文件操作int fd=open("b.txt",O_RDWR | O_CREAT,0777);if(-1 == fd){printf("open err!\n");return -1;}char buf[20] = {0};while(1){//第一题/*bzero(buf, 20);read(client_fd, buf, 20);printf("buf:%s\n", buf);*///第二题bzero(buf, 20);read(client_fd, buf, 20);printf("buf:%s\n", buf);if(!strcmp(buf, "exit"))break;write(fd,buf,strlen(buf));}close(client_fd);close(server_fd);
}

客户端:

/**********
1、在服务器端接受消息时知道对方的IP和端口提示:bind出现:Address already in use    方法:netstat -nap查看 用kill -9 pid杀死
2、利用TCP实现文件传输
**********/#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <strings.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(void)
{//建立套接字int client_fd = socket(AF_INET, SOCK_STREAM, 0);if(-1 == client_fd){perror("socket");return -1;}//链接服务器struct sockaddr_in saddr;bzero(&saddr, sizeof(saddr));saddr.sin_family = AF_INET;saddr.sin_port = htons(7777);saddr.sin_addr.s_addr = inet_addr("192.168.199.205");int ret = connect(client_fd, (struct sockaddr *)&saddr, sizeof(saddr));if(-1 == ret){perror("connect");return -1;}//文件操作int fd=open("a.txt",O_RDWR | O_CREAT,0777);if(-1 == fd){printf("open err!\n");return -1;}char fd_buf[20]={0};while(1){bzero(fd_buf,20);ret = read(fd, fd_buf, 20);  //读文件到缓冲区if(ret==0){write(client_fd,"exit", 20);break;}else{printf("fd_buf%s\n",fd_buf);write(client_fd, fd_buf, 20);}/*bzero(fd_buf, 20);scanf("%s", fd_buf);write(client_fd, fd_buf, 20);printf("fd_buf:%s\n", fd_buf);if(!strcmp(fd_buf, "exit"))break;*/}close(client_fd);}

Linux网络编程,bind:error:Cannot assign requested address,Ubuntu网络桥接相关推荐

  1. ssh_init: Network error: Cannot assign requested address的解决办法

    使用pscp从windows传文件到linux时,使用命令: pscp source_file   username@linux_ip:dst_dir 有时候会报错:ssh_init: Network ...

  2. pscp ssh_init: Network error: Cannot assign requested address

    使用 以下命令 pscg tnsnames.ora root@192.168.50.5:/home 会报ssh_init: Network error: Cannot assign requested ...

  3. ElasticSearch 6.4.3 启动报错: [Cannot assign requested address: bind]

    今天在本地搭建一个测试用的最新版ElasticSearch6.4.3 的环境时,遇到一个报: [Cannot assign requested address: bind]的错误. 错误日志内容如下: ...

  4. 无法分配请求的地址(Cannot assign requested address)的解决方案

    搜索错误关键字"Cannot assign requested address","返回" JSON 内容,返回的引号是因为其实并不是远程接口返回的,而是 Id ...

  5. 记录一次etcd报错: listen tcp xxx.xxx.xxx.xxx:2380:bind: cannot assign requested address

    记录一次etcd报错 背景 问题定位 问题排查 解决方案 小结 背景 今天打算在腾讯云环境上安装k8s(采用ansible脚本自动化部署安装),当安装完etcd之后,发现启动报错. 机器:腾讯云服务器 ...

  6. docker异常--docker bind: cannot assign requested address.

    当我在Window上指定IP+端口号 去开启我的容器 会报如下错误. Error response from daemon: Cannot restart container test_mysql: ...

  7. 阿里云配置服务器报:bind: cannot assign requested address

    阿里云服务器写网络程序时必须使用阿里云服务器的内网ip,不是他的公网ip,访问时是公网ip.具体可见下面这篇文章,十分感谢!!!!使得我写的小程序可以在服务器上运行,和前端小伙伴项目可以进行下去. 参 ...

  8. 阿里云,百度云等云服务器中搭建gitblit-1.8.0时,报java.net.BindException: Cannot assign requested address: bind

    搭建gitblit-1.8.0服务器时,启动gitblit.cmd时,报如下错误: 2019-06-16 14:07:36 [WARN ] FAILED ServerConnector@1ba2af2 ...

  9. fastdfs errno: 99, error info: Cannot assign requested address

    其他解决方案:https://blog.csdn.net/xiangliangyu/article/details/18447861 [2014-01-18 12:42:18] ERROR - fil ...

最新文章

  1. 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。
  2. Windows 10 开发日记(五)-- 当Binding遇到异步 -- 解决方案
  3. webpack 配置简单说几句 ?
  4. 第三章 改进神经网络的学习方式(中下)
  5. mysql查看执行计划_如何查看MySQL的执行计划
  6. 业务理解有偏差,产品和开发如何达成共识?
  7. ajax post传输到后台为空?【解决方案】
  8. java子类和父类有相同成员_Java -- 父类和子类拥有同名的成员变量的情况
  9. navicat工具查看MySQL数据库_表占用容量_占用空间是多少MB---Linux工作笔记048
  10. ES6新特性_ES6_Symbol的介绍与创建---JavaScript_ECMAScript_ES6-ES11新特性工作笔记015
  11. java 密码连接mongo_mongodb启用密码认证连接
  12. sizeof,真正终结版GCC与VC
  13. 计算机怎么剪切音乐然后合在一起,怎么在电脑裁剪歌曲 怎么裁剪和拼接音乐...
  14. php tiff 转 png,tif/tiff图片格式转换器批量jpg、png、jpeg格式转tif/tiff格式
  15. springboot读取文件
  16. 【主板上各种接口和附属部件科普】
  17. day19 文件操作
  18. 健身教程APP开发解决方案
  19. 220V工频正弦波逆变器设计
  20. C语言实现int数组类型冒泡法升序排列

热门文章

  1. PAT(乙级)1089 狼人杀-简单版(JAVA)
  2. 用Python寻找知乎最美小姐姐
  3. C语言南邮数据结构实验报告2,南邮数据结构实验报告.docx
  4. 互动能量杯横空出世,对决中国瓶装水行业
  5. 《人类简史》笔记一——快乐该如何计算
  6. 如何解析超长的protobuf zhuan
  7. [three] | 基于 maptalks + three 的三维城市示例
  8. 力扣123.买卖股票的最佳时机Ⅲ买卖股票的最佳时机Ⅳ
  9. CSS3 设置特殊字体的方法@font-face
  10. 安装Empire时报错