﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-一壶酒，醉一宿</title><link>http://www.blogjava.net/ccbobocat/</link><description>来喝酒</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:00:16 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:00:16 GMT</pubDate><ttl>60</ttl><item><title>[导入][转载]java中用URLConnection 类post方式提交表单</title><link>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309492.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Thu, 16 Jul 2009 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309492.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309492.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309492.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309492.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309492.html</trackback:ping><description><![CDATA[<div>**<br>&nbsp;* &lt;pre&gt;<br>&nbsp;* Title:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpRequestProxy.java<br>&nbsp;* Project:&nbsp;&nbsp;&nbsp;&nbsp; HP-Common<br>&nbsp;* Type:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com.hengpeng.common.web.HttpRequestProxy<br>&nbsp;* Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; benl<br>&nbsp;* Create:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-7-3 上午03:07:07<br>&nbsp;* Copyright:&nbsp;&nbsp;&nbsp;&nbsp; Copyright (c) 2007<br>&nbsp;* Company:<br>&nbsp;* &lt;pre&gt;<br>&nbsp;*/<br>imp<wbr>ort java.io.BufferedReader;<br>imp<wbr>ort java.io.IOException;<br>imp<wbr>ort java.io.InputStream;<br>imp<wbr>ort java.io.InputStreamReader;<br>imp<wbr>ort java.net.HttpURLConnection;<br>imp<wbr>ort java.net.URL;<br>imp<wbr>ort java.net.URLEncoder;<br>imp<wbr>ort java.util.HashMap;<br>imp<wbr>ort java.util.Iterator;<br>imp<wbr>ort java.util.Map;<br>imp<wbr>ort java.util.Map.Entry;<br><br>imp<wbr>ort org.apache.log4j.Logger;<br><br>/**<br>&nbsp;* &lt;pre&gt;<br>&nbsp;* HTTP请求代理类<br>&nbsp;* &lt;/pre&gt;<br>&nbsp;*<br>&nbsp;* @author benl<br>&nbsp;* @version 1.0, 2007-7-3<br>&nbsp;*/<br>public class HttpRequestProxy<br>{<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * 连接超时<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private static int connectTimeOut = 5000;<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * 读取数据超时<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private static int readTimeOut = 10000;<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * 请求编码<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private static String requestEncoding = "GBK";<br><br>&nbsp;&nbsp;&nbsp; private static Logger logger = Logger.getLogger(HttpRequestProxy.class);<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;pre&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; * 发送带参数的GET的HTTP请求<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;/pre&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; *<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param reqUrl HTTP请求URL<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param parameters 参数映射表<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return HTTP响应的字符串<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static String doGet(String reqUrl, Map parameters,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String recvEncoding)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpURLConnection url_con = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String responseContent = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer params = new StringBuffer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator iter = parameters.entrySet().iterator(); iter<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .hasNext();)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entry element = (Entry) iter.next();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append(element.getKey().toString());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append("=");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append(URLEncoder.encode(element.getValue().toString(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpRequestProxy.requestEncoding));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append("&amp;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (params.length() &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params = params.deleteCharAt(params.length() - 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL url = new URL(reqUrl);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con = (HttpURLConnection) url.openConnection();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.setRequestMethod("GET");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setProperty("sun.net.client.defaultConnectTimeout", String<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .valueOf(HttpRequestProxy.connectTimeOut));// （单位：毫秒）jdk1.4换成这个,连接超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setProperty("sun.net.client.defaultReadTimeout", String<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .valueOf(HttpRequestProxy.readTimeOut)); // （单位：毫秒）jdk1.4换成这个,读操作超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // url_con.setConnectTimeout(5000);//（单位：毫秒）jdk<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 1.5换成这个,连接超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // url_con.setReadTimeout(5000);//（单位：毫秒）jdk 1.5换成这个,读操作超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.setDoOutput(true);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] b = params.toString().getBytes();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().write(b, 0, b.length);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().flush();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().close();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream in = url_con.getInputStream();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader rd = new BufferedReader(new InputStreamReader(in,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recvEncoding));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String tempLine = rd.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer temp = new StringBuffer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String crlf=System.getProperty("line.separator");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (tempLine != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp.append(tempLine);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp.append(crlf);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempLine = rd.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseContent = temp.toString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IOException e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.error("网络故障", e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (url_con != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.disconnect();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return responseContent;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;pre&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; * 发送不带参数的GET的HTTP请求<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;/pre&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; *<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param reqUrl HTTP请求URL<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return HTTP响应的字符串<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static String doGet(String reqUrl, String recvEncoding)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpURLConnection url_con = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String responseContent = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer params = new StringBuffer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String queryUrl = reqUrl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int paramIndex = reqUrl.indexOf("?");<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (paramIndex &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queryUrl = reqUrl.substring(0, paramIndex);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String parameters = reqUrl.substring(paramIndex + 1, reqUrl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .length());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] paramArray = parameters.split("&amp;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; paramArray.length; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String string = paramArray[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int index = string.indexOf("=");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (index &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String parameter = string.substring(0, index);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String value = string.substring(index + 1, string<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .length());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append(parameter);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append("=");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append(URLEncoder.encode(value,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpRequestProxy.requestEncoding));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append("&amp;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params = params.deleteCharAt(params.length() - 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL url = new URL(queryUrl);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con = (HttpURLConnection) url.openConnection();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.setRequestMethod("GET");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setProperty("sun.net.client.defaultConnectTimeout", String<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .valueOf(HttpRequestProxy.connectTimeOut));// （单位：毫秒）jdk1.4换成这个,连接超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setProperty("sun.net.client.defaultReadTimeout", String<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .valueOf(HttpRequestProxy.readTimeOut)); // （单位：毫秒）jdk1.4换成这个,读操作超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // url_con.setConnectTimeout(5000);//（单位：毫秒）jdk<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 1.5换成这个,连接超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // url_con.setReadTimeout(5000);//（单位：毫秒）jdk 1.5换成这个,读操作超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.setDoOutput(true);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] b = params.toString().getBytes();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().write(b, 0, b.length);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().flush();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream in = url_con.getInputStream();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader rd = new BufferedReader(new InputStreamReader(in,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recvEncoding));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String tempLine = rd.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer temp = new StringBuffer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String crlf=System.getProperty("line.separator");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (tempLine != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp.append(tempLine);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp.append(crlf);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempLine = rd.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseContent = temp.toString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IOException e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.error("网络故障", e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (url_con != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.disconnect();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return responseContent;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;pre&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; * 发送带参数的POST的HTTP请求<br>&nbsp;&nbsp;&nbsp;&nbsp; * &lt;/pre&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; *<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param reqUrl HTTP请求URL<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param parameters 参数映射表<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return HTTP响应的字符串<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static String doPost(String reqUrl, Map parameters,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String recvEncoding)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpURLConnection url_con = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String responseContent = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer params = new StringBuffer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator iter = parameters.entrySet().iterator(); iter<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .hasNext();)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entry element = (Entry) iter.next();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append(element.getKey().toString());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append("=");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append(URLEncoder.encode(element.getValue().toString(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpRequestProxy.requestEncoding));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.append("&amp;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (params.length() &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params = params.deleteCharAt(params.length() - 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL url = new URL(reqUrl);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con = (HttpURLConnection) url.openConnection();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.setRequestMethod("POST");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setProperty("sun.net.client.defaultConnectTimeout", String<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .valueOf(HttpRequestProxy.connectTimeOut));// （单位：毫秒）jdk1.4换成这个,连接超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setProperty("sun.net.client.defaultReadTimeout", String<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .valueOf(HttpRequestProxy.readTimeOut)); // （单位：毫秒）jdk1.4换成这个,读操作超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // url_con.setConnectTimeout(5000);//（单位：毫秒）jdk<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 1.5换成这个,连接超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // url_con.setReadTimeout(5000);//（单位：毫秒）jdk 1.5换成这个,读操作超时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.setDoOutput(true);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] b = params.toString().getBytes();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().write(b, 0, b.length);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().flush();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.getOutputStream().close();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream in = url_con.getInputStream();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader rd = new BufferedReader(new InputStreamReader(in,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recvEncoding));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String tempLine = rd.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer tempStr = new StringBuffer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String crlf=System.getProperty("line.separator");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (tempLine != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempStr.append(tempLine);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempStr.append(crlf);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempLine = rd.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseContent = tempStr.toString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IOException e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.error("网络故障", e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (url_con != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url_con.disconnect();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return responseContent;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return 连接超时(毫秒)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see com.hengpeng.common.web.HttpRequestProxy#connectTimeOut<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static int getConnectTimeOut()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return HttpRequestProxy.connectTimeOut;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return 读取数据超时(毫秒)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see com.hengpeng.common.web.HttpRequestProxy#readTimeOut<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static int getReadTimeOut()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return HttpRequestProxy.readTimeOut;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return 请求编码<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see com.hengpeng.common.web.HttpRequestProxy#requestEncoding<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static String getRequestEncoding()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return requestEncoding;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param connectTimeOut 连接超时(毫秒)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see com.hengpeng.common.web.HttpRequestProxy#connectTimeOut<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static void setConnectTimeOut(int connectTimeOut)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpRequestProxy.connectTimeOut = connectTimeOut;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param readTimeOut 读取数据超时(毫秒)<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see com.hengpeng.common.web.HttpRequestProxy#readTimeOut<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static void setReadTimeOut(int readTimeOut)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpRequestProxy.readTimeOut = readTimeOut;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param requestEncoding 请求编码<br>&nbsp;&nbsp;&nbsp;&nbsp; * @see com.hengpeng.common.web.HttpRequestProxy#requestEncoding<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public static void setRequestEncoding(String requestEncoding)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpRequestProxy.requestEncoding = requestEncoding;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; public static void main(String[] args)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map map = new HashMap();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put("actionType", "1");<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put("issueId", "33");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String temp = HttpRequestProxy.doPost("http://192.168.0.99/AgentPortal/autoHandler", map, "GBK");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("返回的消息是:"+temp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; }<br>}</div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/320994622009616102329953'>http://blog.163.com/ccbobo_cat/blog/static/320994622009616102329953</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-07-16 10:23 <a href="http://www.blogjava.net/ccbobocat/archive/2009/07/16/309492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Serialization(序列化) 示例</title><link>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309493.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Thu, 16 Jul 2009 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309493.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309493.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309493.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309493.html</trackback:ping><description><![CDATA[<div><div>
    <p>/*</p>
<p>下面的程序说明了怎样实现对象序列化和反序列化。它由实例化一个MyClass类的对象开始。该对象有三个实例变量，它们的类型分别是String，int和double。这是我们希望存储和恢复的信息。</p>
<div>FileOutputStream被创建，引用了一个名为“serial”的文件。为该文件流创建一个ObjectOutputStream。ObjectOutputStream 的writeObject( )方法用来序列化对象。对象的输出流被刷新和关闭。</div>
<div>然后，引用名为“serial”的文件创建一个FileInputStream类并为该文件创建一个ObjectInputStream类。ObjectInputStream 的readObject( )方法用来反序列化对象。然后对象输入流被关闭。</div>
<div>注意MyClass被定义成实现Serializable接口。如果不这样做，将会引发一个NotSerializableException异常。试图做一些把MyClass实例变量声明成transient的实验。那些数据在序列化过程中不被保存</div>
<p>*/</p>
<p>imp<wbr>ort java.io.*;<br>class MyClass implements Serializable{<br>&nbsp;String s;<br>&nbsp;int i;<br>&nbsp;double d;<br>&nbsp;public MyClass (String s,int i,double d){<br>&nbsp;&nbsp;this.s = s;<br>&nbsp;&nbsp;this.i = i;<br>&nbsp;&nbsp;this.d = d;<br>&nbsp;}<br>&nbsp;public String toString(){<br>&nbsp;&nbsp;return "s=" + s + "; i=" + i + "; d=" + d;<br>&nbsp;}<br>}<br>class SerializationDemo{<br>&nbsp;public static void main(String[] args){<br>&nbsp;&nbsp;//Object serialization.<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;MyClass object1 = new MyClass("Evan",9,9.9e10);<br>&nbsp;&nbsp;&nbsp;System.out.println("object1 : " +object1);<br>&nbsp;&nbsp;&nbsp;FileOutputStream fos = new FileOutputStream("serial");<br>&nbsp;&nbsp;&nbsp;ObjectOutputStream oos = new ObjectOutputStream(fos);<br>&nbsp;&nbsp;&nbsp;oos.writeObject(object1);<br>&nbsp;&nbsp;&nbsp;oos.flush();<br>&nbsp;&nbsp;&nbsp;oos.close();<br>&nbsp;&nbsp;}catch(Exception e){<br>&nbsp;&nbsp;&nbsp;System.out.println("Exception during serialization :" + e);<br>&nbsp;&nbsp;&nbsp;System.exit(0);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;//Object deserialization.<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;MyClass object2 ;<br>&nbsp;&nbsp;&nbsp;FileInputStream fis = new FileInputStream("serial");<br>&nbsp;&nbsp;&nbsp;ObjectInputStream ois = new ObjectInputStream(fis);<br>&nbsp;&nbsp;&nbsp;object2 = (MyClass)ois.readObject();<br>&nbsp;&nbsp;&nbsp;ois.close();<br>&nbsp;&nbsp;&nbsp;System.out.println("object2 : " +object2);<br>&nbsp;&nbsp;}catch(Exception e){<br>&nbsp;&nbsp;&nbsp;System.out.println("Exception during serialization :" + e);<br>&nbsp;&nbsp;&nbsp;System.exit(0);<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}</p>
  </div></div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/320994622009616101541196'>http://blog.163.com/ccbobo_cat/blog/static/320994622009616101541196</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-07-16 10:16 <a href="http://www.blogjava.net/ccbobocat/archive/2009/07/16/309493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]transient关键字</title><link>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309494.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Thu, 16 Jul 2009 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309494.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309494.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/07/16/309494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309494.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309494.html</trackback:ping><description><![CDATA[<div>Java的serialization提供了一种持久化对象实例的机制。当持久化对象时，可能有一个特殊的对象数据成员，我们不想
<br>用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization，可以在这个域前加上关键字transient。
<br>transient是Java语言的关键字，用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候，transient型变量的值不包括在串行化的表示中，然而非transient型的变量是被包括进去的。</div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/3209946220096161094144'>http://blog.163.com/ccbobo_cat/blog/static/3209946220096161094144</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-07-16 10:09 <a href="http://www.blogjava.net/ccbobocat/archive/2009/07/16/309494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Javascript 常用正则表达式 </title><link>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309495.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Fri, 10 Jul 2009 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309495.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309495.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309495.html</trackback:ping><description><![CDATA[<div><div >
    <p>匹配中文字符的正则表达式： [\u4e00-\u9fa5]<br>匹配双字节字符(包括汉字在内)： [^\x00-\xff]<br><br>应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）<br>String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}<br>匹配空行的正则表达式： \n[\s| ]*\r<br>匹配HTML标记的正则表达式： /&lt;(.*)&gt;.*&lt;\/&gt;|&lt;(.*) \/&gt;/<br>匹配首尾空格的正则表达式： (^\s*)|(\s*$)<br><br>应用：javas<wbr>cript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现，如下：<br><span >String.prototype.trim = function() {<br>return this.replace(/(^\s*)|(\s*$)/g, "");<br>}</span><br><br>利用正则表达式分解和转换IP地址：<br>下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的javas<wbr>cript程序：<br><br><span >function IP2V(ip) {<br>re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式<br>if(re.test(ip)) {<br>return RegExp.*Math.pow(255,3))+RegExp.*Math.pow(255,2))+RegExp.*255+RegExp.*1<br>}<br>else {<br>throw new Error("Not a valid IP address!")<br>}<br>}</span><br><br>不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：<br><br><span >var ip="10.100.20.168"<br>ip=ip.split(".")<br>alert("IP值是："+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))<br>匹配Email地址的正则表达式： \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br>匹配网址URL的正则表达式： http://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?</span><br><br>利用正则表达式去除字串中重复的字符的算法程序：<br><br><span >var s="abacabefgeeii"<br>var s1=s.replace(/(.).*/g,"")<br>var re=new RegExp("["+s1+"]","g")<br>var s2=s.replace(re,"")<br>alert(s1+s2) //结果为：abcefgi</span></p>
<p><br>用正则表达式从URL地址中提取文件名的javas<wbr>cript程序，如下结果为page1<br><br><span >s="http://www.9499.net/page1.htm"<br>s=s.replace(/(.*\/)([^\.]+).*/ig,"")<br>alert(s)</span><br><br>利用正则表达式限制网页表单里的文本框输入内容：<br><br>用正则表达式限制只能输入中文：<br><span >on<wbr>keyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"
on<wbr>beforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"</span><br><br>用正则表达式限制只能输入全角字符：<br><span >on<wbr>keyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')"
on<wbr>beforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"</span><br><br>用正则表达式限制只能输入数字：<br><span >on<wbr>keyup="value=value.replace(/[^\d]/g,'')
"on<wbr>beforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"</span><br><br>用正则表达式限制只能输入数字和英文：<br><span >on<wbr>keyup="value=value.replace(/[\W]/g,'')
"on<wbr>beforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"</span></p>
  </div></div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/32099462200961005220547'>http://blog.163.com/ccbobo_cat/blog/static/32099462200961005220547</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-07-10 12:52 <a href="http://www.blogjava.net/ccbobocat/archive/2009/07/10/309495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]ant中的classpath配置和使用</title><link>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309496.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Thu, 09 Jul 2009 21:16:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309496.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309496.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309496.html</trackback:ping><description><![CDATA[<div>ant手册中的ant配置classpath采用classpath标签，可是我发现这样配置总是不好用，还是直接用path可以使用
<br>&nbsp; 设置classpath的方法有多种
<br>&lt;path id="project.classpath"&gt;
<br>&nbsp;&nbsp;&nbsp; 1&lt;pathelement path="${basedir}/lib/aa.jar"/&gt;
<br>&nbsp;&nbsp; 2&lt;pathelement location="aa.jar"/&gt;与1的区别在于location可以去当前路径，当然可以使用绝对路径
<br>&nbsp;&nbsp;&nbsp; 3&lt;filelist id="file" dir="${basedir}/lin"&gt;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;file name="a.jar"/&gt;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;file name="d:lib/b.jar"/&gt;
<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/filelist&gt;
<br>&nbsp;&nbsp; 4&lt;fileset dir="d:/lib"&gt;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="**/*.jar"/&gt; 
<br>&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;
<br>&nbsp;&nbsp; 5手册上说了dirset也好用，但是我测试了还是不要用的
<br> &lt;/path&gt;&nbsp;&nbsp;&nbsp; 
<br>&nbsp; 下面说classpath的使用
<br>&nbsp;&nbsp; 样例如下
<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;javac scdir="./src" destdir="./classes"&gt;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid="project.classpath"/&gt;&nbsp; 
<br>&nbsp;&nbsp; &lt;/javac&gt;
<br>
<br>
<br>下面是比较四种方式的优缺点
<br>&nbsp;&nbsp; 第一种调用的需要设置绝对路径适合第三方jar包
<br>&nbsp;&nbsp;&nbsp; 第二种则适合jar包和build.xml文件在同一目录下的情况，但是我觉得两个文件放在一起本身就不合理，估计是用的情况不多。
<br>&nbsp; 前两个都是设置单个jar包
<br>&nbsp;&nbsp; 第三种是一个文件集合适合引入不同路径的jar包，但是需要输入每个jar包的名字，比较繁琐，适合于jar包属于不同位置，比较分散但是不多的情况
<br>&nbsp; 第四种是一个文件夹，可以采用匹配模式来引入，这个适合在同一个文件夹下，文件名字比较多的情况下
</div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/32099462200961051533899'>http://blog.163.com/ccbobo_cat/blog/static/32099462200961051533899</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-07-10 05:16 <a href="http://www.blogjava.net/ccbobocat/archive/2009/07/10/309496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]ant的几个重要集合（SET）</title><link>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309497.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Thu, 09 Jul 2009 21:05:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309497.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309497.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/07/10/309497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309497.html</trackback:ping><description><![CDATA[<div>ant的构建文件中，有很多核心类型，这些核心类型都是XXXSet的形式，主要有以下几个：PatternSet、DirSet、FileSet、PropertySet、ZipFileSet等。说下前三个的功能就应该可以举一反三了。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1.PatternSet&nbsp;
即模式集合。顾名思义，就是定义一个模式，他可以用来指定一个文件集合。常常可以被外部的target引用，复用性很强。有includes、
includesfile、excludes、excludesfile属性。每个属性里面还可以嵌套name、if、unless等类型。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.DirSet&nbsp; 即目录集合。用来定义目录的集合。有dir、casesensitive、followsymlinks和PatternSet也有的那4个属性。上面说过PatternSet可以很好的复用。下面就是一个例子：<br>
<div ><div ><div >Xml代码 </div></div><ol  start="1"><li><span><span >&lt;</span><span >dirset</span><span>&nbsp;</span><span >dir</span><span>=</span><span >"${build.dir}"</span><span >&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span >&lt;</span><span >patternset</span><span>&nbsp;</span><span >id</span><span>=</span><span >"non.test.classes"</span><span >&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span >&lt;</span><span >include</span><span>&nbsp;</span><span >name</span><span>=</span><span >"apps/**/classes"</span><span >/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span >&lt;</span><span >exclude</span><span>&nbsp;</span><span >name</span><span>=</span><span >"apps/**/*Test*"</span><span >/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span >&lt;/</span><span >patternset</span><span >&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;<span >&lt;/</span><span >dirset</span><span >&gt;</span><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none;"  >&lt;dirset dir="${build.dir}"&gt;
               &lt;patternset id="non.test.classes"&gt;
                      &lt;include name="apps/**/classes"/&gt;
                       &lt;exclude name="apps/**/*Test*"/&gt;
                &lt;/patternset&gt;
 &lt;/dirset&gt;
</pre>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是用patternset来定义DirSet的模式，这个模式还可以在外部引用。如：<br></p>
<div ><div ><div >Xml代码 </div></div><ol  start="1"><li><span><span >&lt;</span><span >dirset</span><span>&nbsp;</span><span >dir</span><span>=</span><span >"{build.dir}"</span><span >&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span >&lt;</span><span >patternset</span><span>&nbsp;</span><span >refid</span><span>=</span><span >"non.test.classes"</span><span >/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span><span >&lt;/</span><span >dirset</span><span >&gt;</span><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none;"  >  &lt;dirset dir="{build.dir}"&gt;
                  &lt;patternset refid="non.test.classes"/&gt;
  &lt;/dirset&gt;</pre>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面定义了一个名为non.test.classes的PatternSet，现在就可以引用他了。refid即reference ID.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3.FileSet即文件集合，他的内部属性与DirSet几乎一样，只是多了一个file和defaultexcludes。和dirset一样，经常
嵌入patternset来定义文件集合；但是也有另外一个很常用的类型，叫selector，它并不是一个真正的类型或元素，只是一种、一类类型的统
称。如contains、date、depend、depth、different、filename、present、containsregexp、
size、type等。</p></div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/3209946220096105521217'>http://blog.163.com/ccbobo_cat/blog/static/3209946220096105521217</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-07-10 05:05 <a href="http://www.blogjava.net/ccbobocat/archive/2009/07/10/309497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]message from server: &amp;quot;Host &amp;apos;80dc58cd93cd4c3&amp;apos; is not allowed to connect to this MySQL server&amp;quot;</title><link>http://www.blogjava.net/ccbobocat/archive/2009/06/29/309498.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Mon, 29 Jun 2009 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/06/29/309498.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309498.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/06/29/309498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309498.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309498.html</trackback:ping><description><![CDATA[<div>第一种方法：<br>mysql&gt; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
<br>
    -&gt;     ON &lt;dbname&gt;.*
<br>
    -&gt;     TO &lt;username&gt;@&lt;host name&gt;
<br>
    -&gt;     IDENTIFIED BY '&lt;password&gt;';
<br>

<br>
where &lt;dbname&gt; is the name of the database you are tyring to
connect to, &lt;username&gt; is the username of the user trying to
connect to the database, &lt;host name&gt; the name of the host (in
your case the XXX host) and &lt;password&gt; the password of the user.<br>第二种方法：<br>通过客户端软件设置用户的主机以及权限，<br><a href="http://img.bimg.126.net/photo/ssyyDgISGaSFl-2FWVTHDw==/4805622277382010644.jpg" target="_blank"><img title="message from server: Host 80dc58cd93cd4c3 is not allowed to connect to this MySQL server - ccbobo_cat - 落壁の蜘蛛Μ的博客" alt="message from server: Host 80dc58cd93cd4c3 is not allowed to connect to this MySQL server - ccbobo_cat - 落壁の蜘蛛Μ的博客" src="http://img.bimg.126.net/photo/ssyyDgISGaSFl-2FWVTHDw==/4805622277382010644.jpg"></a><a href="http://img.bimg.126.net/photo/8YNn_Ys6eGmcFS9V4lq9hg==/4543569074064418600.jpg" target="_blank"><img title="message from server: Host 80dc58cd93cd4c3 is not allowed to connect to this MySQL server - ccbobo_cat - 落壁の蜘蛛Μ的博客" alt="message from server: Host 80dc58cd93cd4c3 is not allowed to connect to this MySQL server - ccbobo_cat - 落壁の蜘蛛Μ的博客" src="http://img.bimg.126.net/photo/8YNn_Ys6eGmcFS9V4lq9hg==/4543569074064418600.jpg"></a></div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/32099462200952925050579'>http://blog.163.com/ccbobo_cat/blog/static/32099462200952925050579</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-06-29 14:51 <a href="http://www.blogjava.net/ccbobocat/archive/2009/06/29/309498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]多线程编程学习笔记—条件变量</title><link>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309499.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Tue, 23 Jun 2009 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309499.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309499.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309499.html</trackback:ping><description><![CDATA[<div><div  style="margin: 15px;">
<p  style="margin: 0cm 0cm 0pt;"><b style=""><font size="3"><span style="font-family: 宋体;">一、什么是条件变量</span><span lang="EN-US"></span></font></b></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="font-family: 宋体;">与互斥锁不同，条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程，直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="font-family: 宋体;">条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制，主要包括两个动作：一个线程等待</span><span lang="EN-US"><font face="Times New Roman">"</font></span><span style="font-family: 宋体;">条件变量的条件成立</span><span lang="EN-US"><font face="Times New Roman">"</font></span><span style="font-family: 宋体;">而挂起；另一个线程使</span><span lang="EN-US"><font face="Times New Roman">"</font></span><span style="font-family: 宋体;">条件成立</span><span lang="EN-US"><font face="Times New Roman">"</font></span><span style="font-family: 宋体;">（给出条件成立信号）。</span></font></p>
<p  style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;"><font size="3">条
件的检测是在互斥锁的保护下进行的。如果一个条件为假，一个线程自动阻塞，并释放等待状态改变的互斥锁。如果另一个线程改变了条件，它发信号给关联的条件
变量，唤醒一个或多个等待它的线程，重新获得互斥锁，重新评价条件。如果两进程共享可读写的内存，条件变量可以被用来实现这两进程间的线程同步。</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="font-family: 宋体;">使用条件变量之前要先进行初始化。可以在单个语句中生成和初始化一个条件变量如：</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman">pthread_cond_t my_condition=PTHREAD_COND_INITIALIZER;</font></span><span style="font-family: 宋体;">（用于进程间线程的通信）。</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">也可以利用函数</span><span lang="EN-US"><font face="Times New Roman">pthread_cond_init</font></span><span style="font-family: 宋体;">动态初始化。</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">&nbsp;</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><b style=""><font size="3"><span style="font-family: 宋体;">二、条件变量函数</span><span lang="EN-US"></span></font></b></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="font-family: 宋体;">．</span></font></p>
<table  style="border: medium none ; margin: auto 6.75pt; border-collapse: collapse;" align="left" border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr style="">
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">名称：</font></span></p></td>
<td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">pthread_cond_init</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">目标：</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">条件变量初始化</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">头文件：</font></span></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">#include &lt; pthread.h&gt;</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">函数原形：</font></span></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">参数</span><span lang="EN-US"><font face="Times New Roman">: </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman">cptr<span style="">&nbsp; </span></font></span><span style="font-family: 宋体;">条件变量</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman">attr<span style="">&nbsp; </span></font></span><span style="font-family: 宋体;">条件变量属性</span></font></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">返回值：</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">成功返回</span><span lang="EN-US"><font face="Times New Roman">0</font></span><span style="font-family: 宋体;">，出错返回错误编号。</span></font></p></td></tr></tbody></table>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style=""></span></font></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style=""></span></font></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style=""></span></font></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style=""></span></font></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style=""></span></font></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="">&nbsp; </span>pthread_cond_init</font></span><span style="font-family: 宋体;">函数可以用来初始化一个条件变量。他使用变量</span><span lang="EN-US"><font face="Times New Roman">attr</font></span><span style="font-family: 宋体;">所指定的属性来初始化一个条件变量，如果参数</span><span lang="EN-US"><font face="Times New Roman">attr</font></span><span style="font-family: 宋体;">为空，那么它将使用缺省的属性来设置所指定的条件变量。</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">&nbsp;</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">2.</font></span></p>
<table  style="border: medium none ; margin: auto 6.75pt; border-collapse: collapse;" align="left" border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr style="">
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">名称：</font></span></p></td>
<td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">pthread_cond_destroy</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">目标：</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">条件变量摧毁</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">头文件：</font></span></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">#include &lt; pthread.h&gt;</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">函数原形：</font></span></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">int pthread_cond_destroy(pthread_cond_t *cond);</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">参数</span><span lang="EN-US"><font face="Times New Roman">: </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman">cptr<span style="">&nbsp; </span></font></span><span style="font-family: 宋体;">条件变量</span></font></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">返回值：</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">成功返回</span><span lang="EN-US"><font face="Times New Roman">0</font></span><span style="font-family: 宋体;">，出错返回错误编号。</span></font></p></td></tr></tbody></table>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style=""></span></font></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style=""></span></font></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="">&nbsp;</span>pthread_cond_destroy</font></span><span style="font-family: 宋体;">函数可以用来摧毁所指定的条件变量，同时将会释放所给它分配的资源。调用该函数的进程也并不要求等待在参数所指定的条件变量上。</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">&nbsp;</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">3.</font></span></p>
<table  style="border: medium none ; margin: auto 6.75pt; border-collapse: collapse;" align="left" border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr style="">
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">名称：</font></span></p></td>
<td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">pthread_cond_wait/pthread_cond_timedwait</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">目标：</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">条件变量等待</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">头文件：</font></span></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">#include &lt; pthread.h&gt;</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">函数原形：</font></span></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex); </font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t mytex,const struct timespec *abstime);</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">参数</span><span lang="EN-US"><font face="Times New Roman">: </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman">cond </font></span><span style="font-family: 宋体;">条件变量</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman">mutex </font></span><span style="font-family: 宋体;">互斥锁</span></font></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">返回值：</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">成功返回</span><span lang="EN-US"><font face="Times New Roman">0</font></span><span style="font-family: 宋体;">，出错返回错误编号。</span></font></p></td></tr></tbody></table>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span><span style="font-family: 宋体;">第一个参数</span><span lang="EN-US"><font face="Times New Roman">*cond</font></span><span style="font-family: 宋体;">是指向一个条件变量的指针。第二个参数</span><span lang="EN-US"><font face="Times New Roman">*mutex</font></span><span style="font-family: 宋体;">则是对相关的互斥锁的指针。函数</span><span lang="EN-US"><font face="Times New Roman">pthread_cond_timedwait</font></span><span style="font-family: 宋体;">函数类型与函数</span><span lang="EN-US"><font face="Times New Roman">pthread_cond_wait,</font></span><span style="font-family: 宋体;">区别在于，如果达到或是超过所引用的参数</span><span lang="EN-US"><font face="Times New Roman">*abstime,</font></span><span style="font-family: 宋体;">它将结束并返回错误</span><span lang="EN-US"><font face="Times New Roman">ETIME.pthread_cond_timedwait</font></span><span style="font-family: 宋体;">函数的参数</span><span lang="EN-US"><font face="Times New Roman">*abstime</font></span><span style="font-family: 宋体;">指向一个</span><span lang="EN-US"><font face="Times New Roman">timespec</font></span><span style="font-family: 宋体;">结构。该结构如下：</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">typedef struct timespec{</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>time_t tv_sec;</font></font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>long tv_nsex;</font></font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">}timespec_t;</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">&nbsp;</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">3.</font></span></p>
<table  style="border: medium none ; margin: auto 6.75pt; border-collapse: collapse;" align="left" border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr style="">
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">名称：</font></span></p></td>
<td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">pthread_cond_signal/pthread_cond_broadcast</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">目标：</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">条件变量通知</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">头文件：</font></span></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">#include &lt; pthread.h&gt;</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">函数原形：</font></span></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">int pthread_cond_signal(pthread_cond_t *cond); </font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">int pthread_cond_broadcast(pthread_cond_t *cond);</font></span></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">参数</span><span lang="EN-US"><font face="Times New Roman">: </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><font face="Times New Roman">cond </font></span><span style="font-family: 宋体;">条件变量</span></font></p></td></tr>
<tr style="">
<td style="border-style: none solid solid; border-color: rgb(236, 233, 216) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 77.4pt; background-color: transparent;" valign="top" width="103">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">返回值：</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p></td>
<td style="border-style: none solid solid none; border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 348.7pt; background-color: transparent;" valign="top" width="465">
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span style="font-family: 宋体;">成功返回</span><span lang="EN-US"><font face="Times New Roman">0</font></span><span style="font-family: 宋体;">，出错返回错误编号。</span></font></p></td></tr></tbody></table>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style=""></span></span></font>&nbsp;</p>
<p  style="margin: 0cm 0cm 0pt;"><font size="3"><span lang="EN-US"><span style="">&nbsp;</span></span><span style="font-family: 宋体;">参数</span><span lang="EN-US"><font face="Times New Roman">*cond</font></span><span style="font-family: 宋体;">是对类型为</span><span lang="EN-US"><font face="Times New Roman">pthread_cond_t </font></span><span style="font-family: 宋体;">的一个条件变量的指针。当调用</span><span lang="EN-US"><font face="Times New Roman">pthread_cond_signal</font></span><span style="font-family: 宋体;">时一个在相同条件变量上阻塞的线程将被解锁。如果同时有多个线程阻塞，则由调度策略确定接收通知的线程。如果调用</span><span lang="EN-US"><font face="Times New Roman">pthread_cond_broadcast,</font></span><span style="font-family: 宋体;">则将通知阻塞在这个条件变量上的所有线程。一旦被唤醒，线程仍然会要求互斥锁。如果当前没有线程等待通知，则上面两种调用实际上成为一个空操作。如果参数</span><span lang="EN-US"><font face="Times New Roman">*cond</font></span><span style="font-family: 宋体;">指向非法地址，则返回值</span><span lang="EN-US"><font face="Times New Roman">EINVAL</font></span><span style="font-family: 宋体;">。</span></font></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">&nbsp;</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">下面是一个简单的例子，我们可以从程序的运行来了解条件变量的作用。</font></span></p>
<table  style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr style="">
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 426.1pt; background-color: transparent;" valign="top" width="568">
<p  style="margin: 0cm 0cm 0pt;"><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">#include &lt;pthread.h&gt;<br>#include &lt;stdio.h&gt;<br>#include &lt;stdlib.h&gt;<br><br>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">初始化互斥锁</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">*/<br>pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">初始化条件变量</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">*/<br><br>void *thread1(void *);<br>void *thread2(void *);<br><br>int i=1;<br>int main(void)<br>{<br><span style="">&nbsp;&nbsp;&nbsp; </span>pthread_t t_a;<br><span style="">&nbsp;&nbsp;&nbsp; </span>pthread_t t_b;<br><br><span style="">&nbsp;&nbsp;&nbsp; </span>pthread_create(&amp;t_a,NULL,thread2,(void *)NULL);/*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">创建进程</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">t_a*/<br><span style="">&nbsp;&nbsp;&nbsp; </span>pthread_create(&amp;t_b,NULL,thread1,(void *)NULL); /*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">创建进程</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">t_b*/<br><span style="">&nbsp;&nbsp;&nbsp; </span>pthread_join(t_b, NULL);/*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">等待进程</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">t_b</span><span style="font-size: 10pt; color: black; font-family: 宋体;">结束</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">*/<br><span style="">&nbsp;&nbsp;&nbsp; </span>pthread_mutex_destroy(&amp;mutex);<br><span style="">&nbsp;&nbsp;&nbsp; </span>pthread_cond_destroy(&amp;cond);<br><span style="">&nbsp;&nbsp;&nbsp; </span>exit(0);<br>}<br><br>void *thread1(void *junk)<br>{<br><span style="">&nbsp;&nbsp;&nbsp; </span>for(i=1;i&lt;=9;i++) <br><span style="">&nbsp;&nbsp;&nbsp; </span>{<br>&nbsp; &nbsp; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span>pthread_mutex_lock(&amp;mutex);/*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">锁住互斥量</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">*/<br>&nbsp; &nbsp; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span>if(i%3==0)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span style="">&nbsp;&nbsp;&nbsp;&nbsp; </span>pthread_cond_signal(&amp;cond);/*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">条件改变，发送信号，通知</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">t_b</span><span style="font-size: 10pt; color: black; font-family: 宋体;">进程</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">*/<br>&nbsp; &nbsp; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span>else&nbsp; &nbsp; &nbsp; &nbsp; <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span style="">&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("thead1:%d\n",i);<br>&nbsp; &nbsp; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span>pthread_mutex_unlock(&amp;mutex);/*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">解锁互斥量</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">*/</span></p>
<p  style="margin: 0cm 0cm 0pt 20.05pt; text-indent: 20pt;"><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">sleep(1);<br>}</span></p>
<p  style="margin: 0cm 0cm 0pt;"><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">}<br><br>void *thread2(void *junk)<br>{<br><span style="">&nbsp;&nbsp;&nbsp; </span>while(i&lt;9)<br><span style="">&nbsp;&nbsp;&nbsp; </span>{<br>&nbsp; &nbsp; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span>pthread_mutex_lock(&amp;mutex);</span></p>
<p  style="margin: 0cm 0cm 0pt; text-indent: 40pt;"><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">if(i%3!=0)<br>&nbsp; &nbsp; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span>pthread_cond_wait(&amp;cond,&amp;mutex);/*</span><span style="font-size: 10pt; color: black; font-family: 宋体;">等待</span><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">*/<br>&nbsp; &nbsp; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span>printf("thread2:%d\n",i);<br>&nbsp; &nbsp; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;</span>pthread_mutex_unlock(&amp;mutex);</span></p>
<p  style="margin: 0cm 0cm 0pt 20.05pt; text-indent: 20pt;"><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">sleep(1);<br>}</span></p>
<p  style="margin: 0cm 0cm 0pt;"><span style="font-size: 10pt; color: black; font-family: Verdana;" lang="EN-US">}</span></p></td></tr></tbody></table>
<p  style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">程序创建了</span><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="font-family: 宋体;">个新线程使他们同步运行，实现进程</span><span lang="EN-US"><font face="Times New Roman">t_b</font></span><span style="font-family: 宋体;">打印</span><span lang="EN-US"><font face="Times New Roman">20</font></span><span style="font-family: 宋体;">以内</span><span lang="EN-US"><font face="Times New Roman">3</font></span><span style="font-family: 宋体;">的倍数，</span><span lang="EN-US"><font face="Times New Roman">t_a</font></span><span style="font-family: 宋体;">打印其他的数，程序开始线程</span><span lang="EN-US"><font face="Times New Roman">t_b</font></span><span style="font-family: 宋体;">不满足条件等待，线程</span><span lang="EN-US"><font face="Times New Roman">t_a</font></span><span style="font-family: 宋体;">运行使</span><span lang="EN-US"><font face="Times New Roman">a</font></span><span style="font-family: 宋体;">循环加</span><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="font-family: 宋体;">并打印。直到</span><span lang="EN-US"><font face="Times New Roman">i</font></span><span style="font-family: 宋体;">为</span><span lang="EN-US"><font face="Times New Roman">3</font></span><span style="font-family: 宋体;">的倍数时，线程</span><span lang="EN-US"><font face="Times New Roman">t_a</font></span><span style="font-family: 宋体;">发送信号通知进程</span><span lang="EN-US"><font face="Times New Roman">t_b</font></span><span style="font-family: 宋体;">，这时</span><span lang="EN-US"><font face="Times New Roman">t_b</font></span><span style="font-family: 宋体;">满足条件，打印</span><span lang="EN-US"><font face="Times New Roman">i</font></span><span style="font-family: 宋体;">值。</span><font face="Times New Roman"> </font></font></p>
<p  style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><font size="3">下面是运行结果：</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">#cc –lpthread –o cond cond.c</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">#./cond</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread1:1</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread1:2</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread2:3</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread1:4</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread1:5</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread2:6</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread1:7</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread1:8</font></span></p>
<p  style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman" size="3">thread2:9</font></span></p>
  
  
  
</div></div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/3209946220095235658763'>http://blog.163.com/ccbobo_cat/blog/static/3209946220095235658763</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-06-23 17:07 <a href="http://www.blogjava.net/ccbobocat/archive/2009/06/23/309499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]从硬盘安装Linux</title><link>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309500.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Tue, 23 Jun 2009 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309500.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309500.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309500.html</trackback:ping><description><![CDATA[<div>工具：grub4dos0.4.2(想要的给我发信，我发给你，loveitdoit@163.com)
<br>
<br>文件：fedora7.0映像文件，可在网上下载。
<br>
<br>过程：
<br>
<br>1．解压缩grub4dos0.4.2，把里面的 grldr和menu.lst，文件复制到c盘根目录下。
<br>
<br>2．fedora7.0映像文件不必解压，必须放在fat32的分区里。把里面的isolinux目录下
<br>
<br>的VMLINUZ、INITRD.IMG解压到c盘根目录下。
<br>
<br>3．在c:\下找到menu.lst，用记事本打开并修改，删除其他命令，添加以下命令！
<br>
<br>
<br>title Linux System Install
<br>
<br>kernel (hd0,0)/vmlinuz 
<br>
<br>initrd (hd0,0)/initrd.img
<br>
<br>
<br>4．修改c:\boot.ini文件，在最后面添加c:\grldr="Start GRUB"并保存即可。
<br>
<br>5．重起系统，选择Start GRUB，开始安装。
</div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/3209946220095234437396'>http://blog.163.com/ccbobo_cat/blog/static/3209946220095234437396</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-06-23 16:05 <a href="http://www.blogjava.net/ccbobocat/archive/2009/06/23/309500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]MySQL数据库的主从及双机备份</title><link>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309501.html</link><dc:creator>C.B.K</dc:creator><author>C.B.K</author><pubDate>Tue, 23 Jun 2009 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309501.html</guid><wfw:comment>http://www.blogjava.net/ccbobocat/comments/309501.html</wfw:comment><comments>http://www.blogjava.net/ccbobocat/archive/2009/06/23/309501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ccbobocat/comments/commentRss/309501.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ccbobocat/services/trackbacks/309501.html</trackback:ping><description><![CDATA[<div>花了半天时间研究了下下MYSQL的备份实现，发现其是在MY.CNF（MY.INI）配置文件中作的设置，直接设置服务器唯一性ID号加上其它的附加设
置，则可作为一台MASTER，而在
SLAVE机上，也只需要在配置文件中设置一下连接MASTER所需的参数即可，如果在MASTER里也加上连到SLAVE机的参数，则就是双向备份
了～～不过，这些连接参数中用到的账号需要注意权限的设置，否则会搞半天没反就急死你迪。。。 <br>
我在WIN上和LINUX上各装了MYSQL5，下面是它们的配置： <br>
WIN(172.22.33.33)下的MASTER(由于我改了端口3327所以下面多加了个端口方面的特殊处理了)的配置（my.ini）：(**一定要在mysqld配置段中配置，不象PHP，APACHE可以随便找个方便的地方配的，注意哈！！) <br>
<br>
[mysqld]<br>
#master 设置<br>
server-id=1<br>
log-bin=c:/masterlog<br>
binlog-do-db=db5<br>
<br>
#实现双机备份段，给MASTER同时加上SLAVE段,可选哈，如果不选，那就是WIN到LIN的主从备份 <br>
<br>
master-host=172.22.1.37<br>
master-user=backup2<br>
master-password=backup2<br>
master-port=3306<br>
master-connect-retry=60<br>
replicate-do-db=db5<br>
<br>
数据库中加一个账号: <br>
<br>
GRANT FILE,REPLICATION SLAVE,REPLICATION CLIENT,SUPER ON *.* <br>
TO [email=backup@]backup@'172.22.1.37'[/email] IDENTIFIED by 'backup';<br>
这个权限表示，这个backup账号只能由从备份机172.22.1.37访问只能用来进行备份操作 <br>
LINUX(172.22.1.37)下的SLAVE机的配置(把安装目录里找到的任意一个*.cnf拷到/etc/my.cnf下进行修改)： <br>
<br>
server-id=2<br>
#如果不需要双向备份下面两行可以不要<br>
#否则还要加一个数据库用户账号<br>
/*<br>
GRANT FILE,REPLICATION SLAVE,REPLICATION CLIENT,SUPER ON *.* <br>
TO [email=backup2@]backup2@'172.22.33.33'[/email] IDENTIFIED by 'backup2';<br>
*/<br>
log-bin=./masterlog<br>
binlog-do-db=db5<br>
#---------------------------------------<br>
master-host=172.22.33.33<br>
master-user=backup<br>
master-password=backup<br>
master-port=3327<br>
master-connect-retry=60<br>
replicate-do-db=db5<br>
由于只是大概的弄了一下，特别是在数据库用户方面没有作仔细试验：），可能会有所不太准确的地方，还有就是，上面测试用到的数据库一定要是已经建立好并且
结构相同的，两台机子都重启后会进行检查，如果出现找不到或者检查到结构不同，会报错，最好就是在创建空数据库时或初始时安装两个一样的数据库后就建立好
关系，对于不同版本的MYSQL，官方说明也可以同步，但想一想，把MYSQL5 的数据备份到4中去丢失5的特性也没什么意义吧。。</div><br>文章来源:<a href='http://blog.163.com/ccbobo_cat/blog/static/32099462200952335921779'>http://blog.163.com/ccbobo_cat/blog/static/32099462200952335921779</a><img src ="http://www.blogjava.net/ccbobocat/aggbug/309501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ccbobocat/" target="_blank">C.B.K</a> 2009-06-23 15:59 <a href="http://www.blogjava.net/ccbobocat/archive/2009/06/23/309501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>