在虚拟机linux安装好memcached之后,试着用java程序连接一下memcached的服务端,但却出现了以下错误

  1. com.schooner.MemCached.SchoonerSockIOPool Fri Jan 09 09:45:59 CST 2015 - ++++ failed to get SockIO obj for: 192.168.168.2:11211
  2. com.schooner.MemCached.SchoonerSockIOPool Fri Jan 09 09:45:59 CST 2015 - ++++ failed to create connection to: 192.168.168.2:11211 -- only 0 created.

提示无法建立memcached的connection和SockIO,用ps -ef|grep memcached 命令查看memcached进程

  1. nobody 1871 1 0 08:40 ? 00:00:00 /usr/local/memcached-1.4.17/bin/memcached -d -p 11211 -u nobody -m 64 -c 1024 -P /usr/local/memcached-1.4.17/memcached.pid

说明memcached服务启动正常,难道无法连接虚拟机,这不太可能啊,打开cmd命令,ping 192.168.168.2

虚拟机连接正常啊,那就可能是端口出现了问题,telnet 192.168.168.2. 11211

端口11211连接失败,果然是端口出现了问题。

于是在网上查了一下,原来是由于linux的iptables防火墙原因,需要在iptables里开放11211端口的访问权限,

用ssh客户端连接虚拟机,找到目录/etc/sysconfig下iptables文件,下载下来,用记事本打开

  1. # Generated by iptables-save v1.4.7 on Thu Jan 8 13:46:05 2015
  2. *filter
  3. :INPUT ACCEPT [0:0]
  4. :FORWARD ACCEPT [0:0]
  5. :OUTPUT ACCEPT [59:6824]
  6. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  7. -A INPUT -p icmp -j ACCEPT
  8. -A INPUT -i lo -j ACCEPT
  9. -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  10. -A INPUT -j REJECT --reject-with icmp-host-prohibited
  11. -A FORWARD -j REJECT --reject-with icmp-host-prohibited
  12. COMMIT
  13. # Completed on Thu Jan 8 13:46:05 2015

发现只有一个22端口,怪不得可以直接使用ssh client连接虚拟机,原来iptables默认是开放22端口的,照葫芦画瓢,copy22端口的那行代码,端口改为11211,

  1. # Generated by iptables-save v1.4.7 on Thu Jan 8 13:46:05 2015
  2. *filter
  3. :INPUT ACCEPT [0:0]
  4. :FORWARD ACCEPT [0:0]
  5. :OUTPUT ACCEPT [59:6824]
  6. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  7. -A INPUT -p icmp -j ACCEPT
  8. -A INPUT -i lo -j ACCEPT
  9. -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  10. -A INPUT -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT
  11. -A INPUT -j REJECT --reject-with icmp-host-prohibited
  12. -A FORWARD -j REJECT --reject-with icmp-host-prohibited
  13. COMMIT
  14. # Completed on Thu Jan 8 13:46:05 2015

Ctrl+S,保存,上传,执行命令 service iptables restart

重回cmd窗口,telnet 192.168.168.2 11211

OK,端口连接成功。

在MyEclipse执行java程序

  1. public class Mycache {
  2.  
  3. /**
  4. * @param args
  5. */
  6. @SuppressWarnings("deprecation")
  7. public static void main(String[] args) {
  8.  
  9. MemCachedClient client = new MemCachedClient();
  10. String[] addrs = {"192.168.168.2:11211"};
  11. Integer [] weights = {3};
  12.  
  13. //SockIOPool是Memcached客户端提供的一个套接字 连接池,通俗讲,就是与Memcached服务器端交换数据的对象。
  14. //SockIOPool在应用程序启动时初始化一次就可以了
  15. SockIOPool pool = SockIOPool.getInstance();
  16. pool.setServers(addrs);
  17. pool.setWeights(weights);
  18. pool.setInitConn(5);
  19. pool.setMinConn(5);
  20. pool.setMaxConn(200);
  21. pool.setMaxIdle(1000*30*30);
  22. pool.setMaintSleep(30);
  23. pool.setNagle(false);
  24. pool.setSocketTO(30);
  25. pool.setSocketConnectTO(0);
  26. pool.initialize();
  27. System.out.println(pool.getServers()[0]);
  28. //
  29. // String[] s =pool.getServers();
  30. client.setCompressEnable(true);
  31. client.setCompressThreshold(1000*1024);
  32.  
  33. // 将数据放入缓存
  34. client.set("test2","test2");
  35.  
  36. // 将数据放入缓存,并设置失效时间
  37. Date date=new Date(2);
  38. client.set("test1","test1", date);
  39.  
  40. TestBean bean = new TestBean();
  41. bean.setName("bean1");
  42. client.add("bean1", bean);
  43.  
  44. TestBean bean1 = (TestBean)client.get("bean1");
  45. System.out.println(bean1.getName());
  46.  
  47. // 删除缓存数据
  48. // client.delete("test1");
  49.  
  50. // 获取缓存数据
  51. String str =(String)client.get("test1");
  52. System.out.println(str);
  53. // System.out.println(s.length);
  54.  
  55. }
  56.  
  57. }

输出结果:

memcached连接成功,大功告成!

ps:关于无法连接memcached的问题,网上还有一种可能情况就是linux的安全控制模块selinux的安全控制问题,具体可以在网上搜索。

工作三年多了。混了三年多,什么都不懂,linux也很少接触,原谅我连iptables都不熟悉吧。

linux系统下memcached启动正常但程序无法连接的问题解决的更多相关文章

  1. Linux系统下,启动Tomcat有时报Address already in use

    一.Linux系统下,启动Tomcat有时报Address already in use<null>... 1.那是因为你的tomcat已经启动了tomcat自带的关闭脚本,有时候关闭看上 ...

  2. Redis 在 LINUX 系统下 安装, 启动

    01, 下载  http://www.redis.cn/ ,  这里下再下来的是 redis-4.0.1.tar.gz 这个压缩包 02, 将压缩包放到 linux 系统中,  一般放在 usr/lo ...

  3. Linux系统下Memcached的安装以及自启动

    一.准备工作: 1.下载libevent:http://monkey.org/~provos/libevent/ (由于memcached与客户端的通信是借助libevent来实现的,所以此动作必须在 ...

  4. linux系统下开机启动流程

    在了解开机启动流程之前,还是得先了解一些磁盘的基本知识.磁盘主要由盘片,机械手臂,磁头,主轴马达构成.盘片就是存储数据的物理单位了.然后盘片上我们可以分成扇区(sector)和柱面(cylinder) ...

  5. 【深入学习linux】在linux系统下怎么编写c语言程序并运行

    1. 首先安装下 gcc : centos yum -y gcc 2. 编写c程序保存hello.c: #include <stdio.h> #include <stdlib.h&g ...

  6. qt linux系统下出现Qt5: Unknown module(s) in QT: serialport问题解决

    需要单独安装这个模块, manjaro linux打开包管理器,搜索安装,就好了

  7. Linux系统下vi编辑器的一些简单使用操作

    Linux系统安装vi编辑器 打开终端,输入: sudo apt install vim 然后输入Y等待安装即可 Linux系统下使用vi编辑器的使用 安装好vim后,终端中输入vim即可进入vim编 ...

  8. 不同linux系统添加开机启动程序的命令

    see http://phpcj.org/blog/%E4%B8%8D%E5%90%8Clinux%E7%B3%BB%E7%BB%9F%E6%B7%BB%E5%8A%A0%E5%BC%80%E6%9C ...

  9. Linux系统下启动MySQL报错:Neither host &#39;localhost.localdomain&#39; nor &#39;localhost&#39; could be looked up with

    Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Li ...

随机推荐

  1. BeeswaxException 以及其他问题

    Could not read table BeeswaxException(handle=QueryHandle(log_context='ae18ae74-518f-400b-b4b0-d399ed ...

  2. MSDTC问题集

    一.链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务. 尊重原著作:本文转载自http://sfwxw456.blog.163.com/blog/sta ...

  3. C#中大List的内存分配

    之前在开发中只用到List的时候几乎就是拿过来就用,从来没有考虑过List的内存分配问题,试想一个有10万元素的List的在构造和添加元素时内存是如何变化的呢?在MSDN上关于List的Capacit ...

  4. G - Bullseye

    Description A simple dartboard consists of a flat, circular piece of cork with concentric rings draw ...

  5. <link>: rel, href

    Reference: http://www.w3schools.com/tags/tag_link.asp <link> Attributes: Attribute Value Descr ...

  6. ButterKnife你需要知道的点

    ButterKnife,这个方便findViewById而使用的库,无数的应用在使用它,以注解来实现的他,对应用的性能影响几乎可以忽略,可以放心使用. 使用: compile 'com.jakewha ...

  7. 给WebApp加一个“壳”,实现Andriod系统添加到桌面

    IOS系统的Safari浏览器有一个“添加到桌面”的功能,能在手机桌面上为你的Webapp添加一个快捷方式,其外观和Native App看起来一样. 这个功能对Webapp来说太有用了,它能让用户像“ ...

  8. python笔记之Cmd模块

    python笔记之Cmd模块 Cmd类型提供了一个创建命令行解析器的框架,默认情况下,它使用readline来进行交互式操作.命令行编辑和命令完成. 使用cmd创建的命令行解释器循环读取输入的所有行并 ...

  9. 1.C语言关键字(auto break case char const swtich)

    ANSI C标准C语言共有32个关键字,分别为: auto break case char const continue default do double else enum extern floa ...

  10. NFC的安全性

    NFC近距离无线技术具有快捷.易用.安全等特性,其中安全是支付行业最关心的特性. 众所周知传统磁条银行卡的账号信息,是记录在磁条中,当进行刷卡交易时,POS机将交易金额,银行卡中的账号信息以及用户输入 ...