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

com.schooner.MemCached.SchoonerSockIOPool Fri Jan 09 09:45:59 CST 2015 - ++++ failed to get SockIO obj for: 192.168.168.2:11211
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进程

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文件,下载下来,用记事本打开

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

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

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

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

重回cmd窗口,telnet 192.168.168.2 11211

OK,端口连接成功。

在MyEclipse执行java程序

public class Mycache {

    /**
* @param args
*/
@SuppressWarnings("deprecation")
public static void main(String[] args) { MemCachedClient client = new MemCachedClient();
String[] addrs = {"192.168.168.2:11211"};
Integer [] weights = {3}; //SockIOPool是Memcached客户端提供的一个套接字 连接池,通俗讲,就是与Memcached服务器端交换数据的对象。
//SockIOPool在应用程序启动时初始化一次就可以了
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(addrs);
pool.setWeights(weights);
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(200);
pool.setMaxIdle(1000*30*30);
pool.setMaintSleep(30);
pool.setNagle(false);
pool.setSocketTO(30);
pool.setSocketConnectTO(0);
pool.initialize();
System.out.println(pool.getServers()[0]);
//
// String[] s =pool.getServers();
client.setCompressEnable(true);
client.setCompressThreshold(1000*1024); // 将数据放入缓存
client.set("test2","test2"); // 将数据放入缓存,并设置失效时间
Date date=new Date(2);
client.set("test1","test1", date); TestBean bean = new TestBean();
bean.setName("bean1");
client.add("bean1", bean); TestBean bean1 = (TestBean)client.get("bean1");
System.out.println(bean1.getName()); // 删除缓存数据
// client.delete("test1"); // 获取缓存数据
String str =(String)client.get("test1");
System.out.println(str);
// System.out.println(s.length); } }

输出结果:

memcached连接成功,大功告成!

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

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

最新文章

  1. 在 Git 中 Checkout 历史版本
  2. [No000088]并行循环vs普通循环
  3. 微信公众平台开发接口PHP SDK完整版
  4. AngularJs学习笔记--directive
  5. Excel操作 Microsoft.Office.Interop.Excel.dll的使用
  6. document.createElement()的用法
  7. 3种日志类型,微信付款反馈-->写入txt日志
  8. django signals 信号
  9. CNN
  10. 合并多个Excel文件
  11. [转][html5]网页横屏
  12. PetaPoco源代码学习--1.使用的Attribute介绍
  13. C语言代码复习笔记:第二章
  14. jsp页面如何读取从后台传来的json
  15. 使用Android Studio进行NDK开发
  16. Hadoop 之日志管理—应用在 YARN 中运行时的日志
  17. Eclipse无法编译 build无效 没有class文件
  18. 集合之asList的缺陷
  19. Java微笔记(8)
  20. Qualcom QMI系列-基本知识介绍(转)

热门文章

  1. 设置Proxy Server和SQL Server实现互联网上的数据库安全
  2. select count(distinct a)
  3. cocoapods导入第三方库
  4. node学习 process笔记
  5. c++STL之sort排序
  6. tar.xz 文件如何解压
  7. Mac ssh登陆linux并且显示linux图形
  8. 修复被注入的sql server
  9. javascript 事件设计模式
  10. C++利用指针突破私有成员访问限制