Linux 下面使用RPC需要使用到命令rpcgen.
在Linux下开发RPC程序流程如下:
1.写一个rpc程序
    如test.x
2.使用rpcgen生成必须的文件,通常是客户端和服务器端以及头文件
    $rpcgen test.x
3.使用rpcgen生成服务器端和客户端的C语言代码
    $rpcgen -Ss -o test_server.c test.x
    $rpcgen -Sc -o test_client.c test.x
4.生成Makefile
    $rpcgen -Sm test.x>Makefile
5.编辑源文件,加入你想要的服务等
6.编辑Makefile,这很重要!
7.执行测试

问题:
1.服务器无法启动,错误如下:
Cannot register service: RPC: Unable to receive; errno = Connection refused
unable to register (TESTPROG, VERSION, udp).
安装完rstatd后,为什么启动不了RPC?

提示:Cannot register service: RPC: Unable to receive; errno = Connection refused

这是因为你的服务器没有开启端口映射的功能。今天把这个问题的解决方法写下来,希望对有类似问题的朋友有所帮助。

[root@codebreaker]#setup

   这时会弹出一个类似图形化的界面,光标移动到System services,回车。在新界面中找到portmap项,空格选中。然后选择OK,再选择quit。

[root@codebreaker]#/etc/rc.d/init.d/portmap start   //启动portmap

现在再试下rpc.rstatd?

====================================


解决方法:系统没有安装portmap或者没有启动portmap端口映射。
$ls /etc/init.d/    
如果没有portmap则安装之
    $sudo apt-get install portmap
如果有了,则启动
    $sudo /etc/init.d/portmap start
还可以使用chkconfig设置系统开机启动的服务项,如将portmap加入开机启动:
    $sudo chkconfig --level 2 -s portmap on

下面是开发一个rpc程序的具体流程,详见
http://zhoulifa.bokee.com/6128714.html
我在编程中遇到以下几个问题:
1.MySQL数据库错误
    1)报告连接不上MySQL,代码如下
if(mysql_real_connect(conn,"127.0.0.1","root","password",
    "database",0,NULL,0)){
    fprintf(stderr,"%s\n%s\n",mysql_error(conn),
        "数据库连接失败");
    exit(1);
}
原因如下:判断语句错误,应该为if(mysql_real_connect(conn,...)==NULL){
    ...
}
2.更新数据失败
    char *sql="update test_table set balance=1000 where id=1000";
    result=mysql_query(conn,sql);
    if(result==NULL){
        .....
        /*错误*/
    }
原因如下:还是判断语句错误,由于更新操作不向查询select操作,如果成功也是返回NULL,所以这里不需要判断result==NULL,其实这时数据库中的结果已经被更新了。
3.RPC源文件test.x书写不当,但是我的程序已经基本实现了,这是怎么办?
    第一次声明test.x时就把函数完全声明正确有一点困难,所以出错在所难免,修改程序也很方便,首先,函数定义和声明(举例客户端)在 test_clnt.c,bank.h以及test_client.c(假设这个是你自己实现的客户端),只要修改这三个文件即可。

来源:http://blog.csdn.net/leisure512/archive/2009/11/11/4799328.aspx
1,不使用wsdl

建立:soap文件夹后把nusoap库放如,nusoap下载地址:http://sourceforge.net/projects/nusoap/
服务端:helloworld2.php

<?php  
//包函nusoap.php  
require_once('./lib/nusoap.php');  
  
//创建服务端  
$server = new soap_server;  
  
//定义客户端调用方法  
$server->register('hello');  
  
//调用方法以及参数  
function hello($name) {  
return 'Hello, ' . $name;  
}  
  
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';  
$server->service($HTTP_RAW_POST_DATA);  
?>

client端:hello.php:

<?php
//包函nusoap.php
require_once('./lib/nusoap.php');
//新建一个soap客户端,调用服务端提供的wsdl
//$client = new soapclient('http://localhost/soap/hellowsdl2.php?wsdl', true);
$client = new soapclient('http://localhost/soap/helloworld2.php');
//查看一下是不是报错
$err = $client->getError();
if ($err) {
//显示错误
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}

//调用服务端的方法
$result = $client->call('hello', array('person' => "this is a soap"));

echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
?>


2,使用wsld
建立目录:test,把nusoap库放如,nusoap下载地址:http://sourceforge.net/projects/nusoap/
服务端:helloworld2.php

<?php  
//包函nusoap.php  
require_once('./lib/nusoap.php');  
//新建一个soap服务  
$server = new soap_server();  
//初始化支持wsdl  
$server->configureWSDL('hellowsdl2', 'urn:hellowsdl2');  
//定义数据结构来接收数据  
$server->wsdl->addComplexType(  
'Person',  
'complexType',  
'struct',  
'all',  
'',  
array(  
'firstname' => array('name' => 'firstname', 'type' => 'xsd:string'),//后面的type定义数据的类型,这个是string  
'age' => array('name' => 'age', 'type' => 'xsd:int'),//后面的type定义数据的类型,这个是int  
'gender' => array('name' => 'gender', 'type' => 'xsd:string')//后面的type定义数据的类型,这个是string  
)  
);  
$server->wsdl->addComplexType(  
'SweepstakesGreeting',  
'complexType',  
'struct',  
'all',  
'',  
array(  
'greeting' => array('name' => 'greeting', 'type' => 'xsd:string'),  
'winner' => array('name' => 'winner', 'type' => 'xsd:string')  
)  
);  
//服务器定义的soap调用方法  
$server->register('hello',                    // 方法名字hello,方法就在下面  
array('person' => 'tns:Person'),          // 客户端传来的变量  
array('return' => 'tns:SweepstakesGreeting'),    //返回参数  
'urn:hellowsdl2',                         // soap名  
'urn:hellowsdl2#hello',                   // soap的方法名  
'rpc',                                    // 使用的方式  
'encoded',                                // 编码  
'test'                                    // 存档  
);  
//定义上面注册过的函数hello  
function hello($person) {  
$greeting = 'Hello, ' . $person['firstname'] .  
'. It is nice to meet a ' . $person['age'] .  
' year old ' . $person['gender'] . '.';  
  
$winner =  'Scott';  
//要返回的数据  
return array(  
'greeting' => $greeting,  
'winner' => $winner  
);  
}  
// 请求时(试图)调用服务  
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';  
$server->service($HTTP_RAW_POST_DATA);  
?>


客户端:hello.php


<?php
//包函nusoap.php
require_once('./lib/nusoap.php');
//新建一个soap客户端,调用服务端提供的wsdl
//$client = new soapclient('http://localhost/test/hellowsdl2.php?wsdl', true);
$client = new soapclient('http://localhost/test/helloworld2.php');
//查看一下是不是报错
$err = $client->getError();
if ($err) {
//显示错误
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
//要向服务端要传的参数
$person = array('firstname' => 'Willi', 'age' => 22, 'gender' => 'male');

//调用服务端的方法
$result = $client->call('hello', array('person' => $person));
//错误审核
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
$err = $client->getError();
if ($err) {
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}
//显示请求信息
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
//显示返回信息
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
//显示调试信息
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
?>




实践来源:http://www.jz123.cn/text/1234122.html
开源的魅力不仅仅在于他是免费的,更重要的是创新。即使淘宝,阿里巴巴他们在MySQL方面也毫无建树。是的,我听说他们在尝试修改底层了,但是他们的目的只是为了证明他们可以修改,而不是在于创新,他们所做的事情都是在模仿前人做过的事情。

echo "abc"|tr '[a-z]'  '[A-Z]'  
比如开发一个apache的module,挡掉那些不起眼的爬虫。这个是最重要的!
小站可以:if(stripos($_SERVER['USER_AGENT'],'robot')!==fales){
exit;
}
或者bot
后面有其他的方法,值得去参考。
阅读全文
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Js的onload和js表单提交submit的demo示例</title>
<script language="javascript">
window.onload=function()
{
  document.forms.registerform.submit();

}
</script>
</head>

<body>
<form  id="registerform" name="register"  method="post" action="www.baidu.com">
  <label for="name"></label>
  <input name="name" type="text" id="name" value="name" />
</form>
</body>
</html>
前阵子总是发现 httpd 进程的使用内存总量居然达到了上百Mb,有时甚至上Gb,真是夸张。Apache 是架在 Squid 的后面,照理说不应该出现这种情况。通过排查,发现是 Apache 中开启了持续长连接导致。
阅读全文
我 是那种就是不能停止创业的孩子。我想我真的害怕给别人打工。问题是,我以前在创业这件事情上似乎糟透了。屡战屡败。某些时候我会想说,“管他的,我可以拿 到一份高薪工作。”问题是,我就是不能不去想那些让我兴奋得有些可笑的下一件伟大的事情。事实证明,问题并不出在我自身。相反,我身边没有足够熟悉创业的 人来指出我的方法错了。阅读全文
人在顺利的时候,成功的时候就是胜不骄;在失败的时候就不要轻易服输。你有个不服输的这股劲头,再难的关都能过。所以我建议他们(创业者)在这个时候能坚强一点,没有过不去的坎,当然也不是靠睡大头觉睡过去的。

  其实某种程度上,人遇到波折是好事。人在成功的时候,在顺利的时候,其实是学不到啥东西的。只有那些失败的时候,总结教训往往是深刻的,确实是受用的。



向柳传志取经

  我在最困难的1997年的时候,准备做脑白金还没做的时候,找柳传志深入聊过一次,问他他的一些企业文化。后来我们公司的企业文化,就是吸收了他公司的很多。

  第一条就是说到做到,做不到就不要说。这个话很土,但是很实用,这个就从柳传志挑起来的,他跟我说了这个标准。因为我过去也经常发生这个情况,我的部下向我拍胸脯,我下个月销售额一定做到多少,然后到下个月没有完成,没完成好像也没啥,然后他又再往下个月再拍胸脯,这样一搞就等于下面骗上面,上面再一放炮又骗下面,团队的气氛就非常不好,没有战斗力。

  后来我跟柳总聊过之后,我就定了这样的。分公司要向上面报销售的时候,我就跟他们说,你可以报少,但报了就一定做到。这个气氛一形成好之后,公司在这个方面就很踏实。

未来的创业者,最重要的素质,我觉得他需要两个:第一是他个人的悟性,没有悟性的话你应该去打工,不一定去做一个创业者,悟性可能是天生的成分很大。就是一个要有悟性的人才能作为一个创业者的领导者;第二个,他能很勤奋能吃苦。就是这两个,少一个我觉得都不行。这两个加起来我觉得他就成功了一大半。

第一桶金源于智慧积累
真正的成功是资源整合
我在设置禁止显示文件列表后发现访问有index.php文件的文件夹时无法找到index.php
解决:
找到apache的配置文件httpd.conf后找到
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>
在其中添加index.php,搞定.
我的配置:
主要是对某些网站需要通过passport转发一下:
DocumentRoot ***
ServerName ***
AddDefaultCharset UTF-8
DirectoryIndex passport.php


来源:http://learnmore.javaeye.com/blog/425176
 作为开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题,我该如何突破自身的瓶颈,以便更好的发展呢?阅读全文
步骤:

1、数据库----反向工程

2、在反向工程向导中选择--设置--然后选择---Microsoft--ODBC-for--oracle

3、新建数据源---选择用户数据源----Microsoft--ODBC-for--oracle

4、输入用户名和数据库名

5、输入数据库密码---选择需要绘制的表

来源:http://www.newwhy.com/2010/0912/14288.html
在日常的工作中,你或许经常用到数据库。当然,首先,你要先对数据库的结构及关系进行设计,当然,如果你首先用visio来画出你要的图形这样对于理清思路是很有帮助的。不过,在许多时候,你可能需要维护现有的数据库,并要理清现有数据库的表与表之间的关系。你仍然可以采用visio.visio有一项非常有意思的功能,叫做反向工程功能。一般而言,visio对数据库的连接是通过ODBC进行的,新建一个图表,在模型中找到数据库下面的数据库模型,在菜单栏中会多出一项数据库,在里面找到反向工程,然后,按照提示走即可了。对于mysql或是postgresql这样的开源数据库,你或许需要先安装其connect,如mysql connect,然后按提示即可自动绘出你所要的图形,简单再通过自己的润色即可得出你所要的结果,如何,很有意思也可以很迅速的提高工作效率吧。
具体操作:
三步走。
<1>建立数据源
打开控制面板—>管理工具—>数据源 (ODBC),或直接运行odbccp32.cpl命令。打开ODBC数据源管理器。添加一个系统数据源。选择Sql Server作为数据源的驱动程序,键入数据源名称demo,选择合适的sql server服务器,然后一路默认下去。(在后面的步骤中可以选择需要进行反向工程的数据库,默认是master)数据源信息如图一示。

<2>在visio中新建数据库模型图
打开visio 2003,文件—>新建—>数据库—>数据库模型图。建立数据库模型图之后,菜单栏多出一个菜单项"数据库"。
<3>反向工程
菜单项数据库—>反向工程。启动反向工程向导,一步步完成反向工程设置。
1.建立与数据库的连接。选择visio驱动程序的类型决定了可以连接的数据库类型及可用选项。数据源指定数据库位置及连接信息。这里我们选择visio驱动程序为Microsoft Sql Server,数据源为刚建立的demo。如图二示。
2.连接数据源。输入用户名和密码用于连接数据源。
3.选择要进行反向工程的对象类型,如图三示。
4.选择要进行反向工程的表和视图。
5.选择要进行么向工程的存储过程。
6.是否想让选择了反向工程的项添加到当前工程中。选择是才能生成图。

结果大致向下面这样。
复制来源参考:http://www.cnblogs.com/sharpaxe/articles/555276.html


Mysql:
Mysql ODBC驱动包 5.1 For WIN32
下载参考:http://www.hzzhit.com/blog/tool/Mysql-ODBC-driver.html

官方下载:http://dev.mysql.com/downloads/connector/odbc/3.51.html
老外下载:http://www.freewarefiles.com/downloads_counter.php?programid=19970
点击在新窗口中浏览此图片
参考来源:
http://www.igvita.com/2008/02/11/nginx-and-memcached-a-400-boost/
这个风格值得学习,特别是对memcache的urlrewrite来实现,是一个高并发的方向。
为何模拟浏览器的cookie,或者登陆,必须要再别的url抓取cookie,然后再模拟cookie发出:
curl:
把curl_setopt($ch,CURLOPT_HEADER,false)就行了。
需要展现cookie:

curl_setopt ( $ch_curl, CURLOPT_HEADER, true);

//打开cookie显示!!!


function curl_post($url, $content)
{
    //echo $url;
    //echo $content;

    $str_url = $url;
    $str_post_data = $content;
    $ch_curl = curl_init ();
    curl_setopt ( $ch_curl, CURLOPT_TIMEOUT, 3 );
    curl_setopt ( $ch_curl, CURLOPT_HEADER, true);
    curl_setopt ( $ch_curl, CURLOPT_POST, 1 );
    curl_setopt ( $ch_curl, CURLOPT_RETURNTRANSFER, true );
    curl_setopt ( $ch_curl, CURLOPT_URL, $str_url );
    curl_setopt ( $ch_curl, CURLOPT_POSTFIELDS, $str_post_data );
    $str_return = curl_exec ( $ch_curl );
    
    if ($str_return === false)
        return false;
    curl_close ( $ch_curl );
    return $str_return;
}  
如何把find的文件按时间排序?从最早到现在
如果你的文件数量不大
可以用ls -rt $(find . -type f) 来实现
find /path|xargs ls -lt


Demo:
常用两天前修改过的文件:


======
1)3天内修改过的文件:

2)find命令使用超过6天,空文件独立查询命令。


3)查找超过6天且是空文件的find命令:

阅读全文
分页: 131/272 第一页 上页 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 下页 最后页 [ 显示模式: 摘要 | 列表 ]