第一篇:公文的语言与逻辑,看似深奥其实简单!大全
公文作为一种应用文体,有其自身的特点,这些特点是与散文及其他文体的比较而言。“散文重神韵,公文重逻辑。”这句话高度概括了散文和公文的区别,也点明了对公文的基本要求,就是语言的逻辑严密性。
一、公文语言要符合形式逻辑的基本要求
公文写作,既要符合辩证逻辑,也不能违反形式逻辑。通常,说公文写作的指导理论是逻辑学,一般是指形式逻辑学。
概念、判断、推理是形式逻辑的三大基本要素。公文写作的每一个环节都涉及到三大基本要素,每一篇公文都需要严格遵循逻辑学的基本规范。
(一)要正确运用概念。概念是人们对事物本质的认识。辨析概念是逻辑思维中判断与推理的基础,也是公文写作的基础。如果对概念的认识不清,那么与这个概念有关的的语言都会变得混乱模糊,判断与推理就难以进行,或者产生错误的结论。因此,公文写作必须正确运用概念,注意概念的内涵和外延,注意概念之间的逻辑关系,理清概念之间是并列、包含、交叉还是重合关系。
1.概念的内涵要准确。
例:市委、市政府把“百万农户致富工程”作为农业农村工作的重要环节……。
---对“百万农户致富工程”的理解错误,或者是对“环节”的理解错误。
例:……推动粮食事业又好又快发展。
---对“事业”的理解错误。注意“事业”与产业和企业的区别。
例:我市是快速发展的中等城市。
---对中等城市的内涵理解错误。
2.注意概念的外延和大小。概念有大小之分,对于多个概念,首先要搞清概念之间的种属关系,明确哪个大、哪个小,不能把关系弄混淆。
例:从现在情况看,现代农业主要是设施农业。
----外延过窄。
例:市政府高度重视少年儿童的成长,采取一系列措施,加快了中小学、职业技术学校和大学教育的发展。
-----“少年儿童”的外延过宽。
3.顿号连接的概念,原则上是并列关系。把包含关系、交叉关系处理成并列关系,造成逻辑混乱,是常见的毛病。(数量要适当,完全列举的除外。)
例:要把社会保障、综治信访、农业生产、人居建设、计划生育服务、合作医疗、民政救济等事项,统一纳入服务中心集中办理。
----概念不当并列,从是否并列的角度讲,此句中的“农业生产、人居建设”两个概念与其他概念不并列;从概念的内涵上讲,“农业生产”和“人居建设”都有人在野外、室外活动的意思,不可能纳入服务中心办理。
例:狠抓行政提速、服务提质、工作提效……
---“行政”、“服务”两个概念与“工作”概念是包含与被包含或交叉关系,不能以顿号连接。
例:今年以来,我市以加快推进环卫基础设施建设,建立健全“户集、村收、乡运、县处理”的一条龙保洁体系,优化县乡环境质量为重点,持续加大县乡环境卫生工作力度,各项工作稳步推进。
----此句为“以”字句,涉及对概念构成的理解。有重点,就有整体,整体必然大于重点。但此句中,“优化县乡环境质量”不是“县乡环境卫生工作”的组成部分。
4.概念反映着分析问题、认识问题的思路和角度,体现着解决问题的方式方法。
以“产业结构”为例,它表达的是分析产业构成及其相互之间关系的思维方法。你正确地运用“产业结构”这一概念,就意味着你有了对国民经济的结构分析方法。
5.概念是理论创新的基础。所有的理论都是围绕着某个概念或概念群创建起来的。
中国人对概念的辨析意识普遍不强。
由于我们都没有精确辨析概念的意识,往往许多概念都被用滥、用错。
6.概念的创新是语言发展的主要内容。
语言的发展表现为概念的新陈代谢。汉语的新陈代谢,除了部分自我创新外,主要依靠大量吸收外来词,同时淘汰长期不用的词汇。外来词的主要来源是日本。日本汉语对中国的影响,除了固定的词汇外,它的构词法也深深地影响着中国现代汉语。
如:前缀构词法
1、超……:超强,超豪华,超爽,超动人;
2、准……:准新娘,准新郎,准妈妈,准爸爸;
3、真……:真英雄,真好汉,真男儿;
后缀构词法
1、……化:多元化、大众化、电气化、革命化……;
2、……炎:气管炎、关节炎、胃炎、肠炎……;
3、……力:生产力、消费力、想象力、劳动力、记忆力……
(二)要正确运用判断
判断是思维的基本形式。所谓判断,就是对思维对象有所肯定或有所否定。
1.公文语言中,判断句所占比例非常高。写作中,通常,判断句的错误是对所判断对象的性质定位不准确。
例:优先发展重点镇,是发展县域经济的新平台和突破点,是促进城镇化健康持续发展的重要举措。
例:劳动模范是一种无形资产,不仅可以带来社会效益,而且能够创造经济效益。
----此两例都是偷换概念。前例是偷换词性;后者中,第一句是把“劳动模范”概念内涵限定为“荣誉称号”,第二句却把“劳动模范”限定为“劳动者”。
如:农业面源污染(防治)是生态建设的薄弱环节。
---判断的主项与谓项性质要相同。
我们习惯于作简单判断而不习惯、不擅长对判断作论证,所以有“论而不证”之说。中国古代的经典著作,都是直接作结论,没有条理分明的推理。这种不对结论作推理证明的习惯,减低了我们的判断和说理能力。公文写作中,布置工作、对下提要求部分内容,大部分人都不会感到太困难;但第一部分,阐述道理、分析形势、提出观点部分,大部分人都容易出问题。
简单判断容易出现错误,重要原因还在于简单判断往往会更多地受情感因素的影响。
(三)要正确运用推理
1.推理是由一个或几个已知的判断推出一个新的判断的思维形式。任何一个推理都包含已知判断、新的判断和一定的推理形式。
推理有两种方式:归纳和演绎。此两种思维方式在公文写作中都要运用到。其中归纳的运用尤其多。
归纳对写作而言,有两个意思:一是归拢并使材料有条理。二是由一系列具体的事实概括出一般结论。
2.归纳不足的问题在公文写作中比较常见。一般表现为只有数据和各种原始材料但没有结论,或者有结论但都是抄袭了别人的,没有针对性,让读者看了得不到任何启发。
推理的语言形式为表示因果关系的复句或具有因果关系的句群。
“因为……所以……”、“由于……因而……”、“因此”、“由此可见”、“之所以……是因为……”等句子都是推理句。常见错误是因果倒置、自相矛盾、推不出等。
举推理有问题的句子:
例:县区政府的主要负责人是……领导小组的组长,组织部长是……领导小组的重要成员,由此可见……工作的特殊性。
---因果倒置。
例:我们在市、县信访部门加挂了群众工作部的牌子,乡镇、街道设立了群众工作站,村居设立了群众工作室,这充分表明了我们的群众工作理念得到了转变……。
---推不出
如:我市正处于跨越赶超、加快发展的关键阶段,因此,今后一个时期,经济社会发展对环境容量的需求和依赖程度将进一步加大。
----所省略的大前提(经济社会发展越快,对环境的依赖程度越大)错误。
(四)要正确处理句子和不同层次内容的逻辑关系
常见的逻辑关系有因果关系、并列关系、交叉关系、对立关系、先后关系、大小关系、上下关系等等。
从一篇领导讲话稿的布局谋篇来说,首先要考虑的是几部分内容之间,是并列关系?包含关系?交叉关系?如果是并列关系的内容,要放到同一级别、不同题目之下;如果是重合关系的内容,“小概念”的内容要放到“大概念”之中;如果是交叉关系,那就要进行拆分,理清头绪。
讲话稿三部分内容,第一部分,是“认识”,第二部分是“措施”,第三部分是“组织领导”或“责任”,这三部分是并列关系,所以放到同一级别的三个题目之中。
1.有一种常见自相矛盾,就是成绩部分与问题不足部分矛盾,以至于产生问题和不足部分否定了成绩部分的后果。
从具体句子来看。
如:这种问题总体上在我市不存在,但在某些干部和机关人员身上不同程度地表现出来,有的还比较突出。
---自相矛盾。
能不能准确地发现别人语言上的自相矛盾,最能反映人的逻辑思维能力。不能判断别人语言中的矛盾,就可能受忽悠。
如:繁荣的商贸物流业推动形成了规模巨大的人流、物流、资金流和信息流。
--因果关系不成立。
再如:要严格落实建设程序和标准,确保工程质量,让群众住得放心、安心、舒心。
----确保工程质量,是“住得是否安心、舒心”的必要条件,而不是充分条件,因此,“舒心”是狗尾续貂。
再如:为认真贯彻落实市委市政府关于进一步加强调研工作的意见精神,促进农村中小学布局更加合理……
---前后不是相关关系,显得突兀。
2.要正确处理“措施”与“结果”之间的关系。某项措施之后,所衔接的“结果”或“效果”,一般地,要求是直接的、对应的“结果”或“效果”,而不是间接的、不对应的。
如:购买不满五年的不准上市,满五年上市转让的,要补足土地收益等相关价款,确保真正需要帮助的困难家庭受益。
----前面的措施并不能必然“确保真正需要帮助的困难家庭受益”,行为与结果无直接因果关系。
再如:各级要切实把推进商标战略的实施放在突出位置,加强引导,搞好服务,全面提升我市经济发展的质量和水平。
---实施商标战略,是提升我市经济发展的质量和水平的重大举措,但“搞好服务”与“提升我市经济发展的质量和水平”之间没有直接的因果关系。全句的落脚点应该放到商标工作本身。
再如:要加大舆论监督力度,发挥好新闻媒体的监督效应,确保群众反映的问题件件落到实处。
---媒体监督得好,并不一定使群众反映的问题落到实处。所以,充分且必要条件不成立。
再如:巩固四级群众工作网络,健全群众工作基础设施和保障体系,丰富载体、夯实基础,促进信访问题在一线在基层得到化解。
---最后一句与前面句子衔接有问题,行为与结果缺乏直接的因果关系。
现实中存在大量逻辑关系错误的例子。如:
犯罪与爱国一点儿关系都没有!
---矛盾关系错为不相关关系。
例:各县以户外广告专项整治为抓手,突出做好队伍、机制和方法三篇文章,以户外广告整治带动了城乡环境整治的深入开展。
----“户外广告专项整治”不是“三篇文章”的抓手。
例:以优质高效农产品的种养加为主要技术,以推进一乡一业、一村一品为抓手,强化技能培训。
---在“以……为抓手”句型中,“抓手”要小,后面的内容要大。“推进一乡一业、一村一品”,不是“强化技能培训”的抓手。另外,把“种养加”理解为“技术”,是对概念的性质理解错误。
3.如何处理前后关系是个常见问题。先说哪个概念,后说哪个概念,或者,先说那句,后说那句,那个层次在前,那个层次在后,是写作中比较常见的问题。
一般的,在处理前后关系时,要先虚后实,先上后下,先大后小……。
例如:“按照“保住一头、启动一头、规范一头”的要求,以“建民心工程、让百姓安居”为目标……”
----此句中,应当“目标”在前,“要求”在后。
再如:提高企业商标注册、运用、保护和管理能力,发挥商标在转变经济发展方式、调整经济结构、加快县域经济发展的作用,加快培育一批市场美誉度高、竞争力强的商标,为全市经济又好又快发展做出贡献。
---“发挥商标在转变经济发展方式、调整经济结构、加快县域经济发展的作用”一句,应当放在“加快培育一批市场美誉度高、竞争力强的商标”之后。
如:农村中小学布局调整是指从各地的自然和经济社会条件出发,将分散的中小学适当集中起来,重新进行区域内的网店布局和规划。
----语序错误,前后颠倒,其实也是因果颠倒
如:以创建国家园林城市为目标,抓住两型社会建设改革试点的机遇,……
----上下或大小颠倒。
(五)要正确认识公文语言的模糊性
1.语言要符合逻辑,是原则性的要求。并不是所有的语言都必须符合逻辑,公文语言也有一定的模糊性、相对性,许多违反逻辑规则的语言并不是错的。
如:“生前友好”、“救火”等词语,“衣服沾上泥了”(与“泥巴沾到墙上了”相对讲。)、“心里想”等句子,就是例子。
“金钱如粪土”“朋友值千金”--两句经常放在一起讲,虽然从逻辑上分析,会推出“朋友如粪土”的荒唐结论。但是这两句话更多地是用于表达情感而非逻辑,所以两句放在一起,应当忽略其逻辑上的模糊性。
公文语言与数学思维。公文写作的许多技巧,与做数学题的方式方法有相通之处。如:代数中有提取公因式、合并同类项,在公文写作中,对材料进行删、减、调整,都要运用同样的处理方法。
如:要集中建设行政审批、行政处罚、行政征收等行政权力网络运行系统,实现行政权力的网上运行、网上办理、网上反馈。
---改为:要集中建设审批、处罚、征收等行政网络运行系统,实现行政权力的网上运行。
二、公文语言要符合语言学的基本规范
语言的规范性,是指公文要符合语言学的基本要求。
1、从语音学看公文语言。由于部分公文特别是领导讲话稿需要用口语表达,因此在写作时就需要考虑发音问题。这意味着:公文语言要有美感、有力度,过于拗口的、不适宜口语表达的句子,不能出现在讲话稿中。
如:要切实落实实质性措施,确保工作实效。
再如:我市是十二个县区的人口和地域大市。
讲稿必须便于口语表达,方便寻找句子的重音。人在朗读的时候,需要不断地寻找重音,或者是逻辑重音,或者是感情重音,以便听起来抑扬顿挫,如果句子太拗口,念起来别扭,断句不易,常会念破句子,不容易确定重音,听起来没有美感。
如:“某某县生活垃圾中转站工程将于3月底前完工并与市生活垃圾填埋场签订有关协议,将县城及周边乡镇生活垃圾全部运往市生活垃圾填埋场进行无害化处理。”
需要注意的是,领导讲话中,常会涉及到规范性公文的题目,题目都很长。有的同志把文件题目有书名号完整地引用上,甚至连续引用两个以上的文件题目,这都是不合适的。
如:这次下发的《关于加强和改进新形势下工商联工作的意见》同1991年中央下发的《中共中央批转中央统战部《关于工商联若干问题的请示》的通知》相比,无论在理论上还是在实践上,都有重大突破。
--句子过长。特别要注意有书名号引用的内容,往往不便于口读,应压缩。
有些长句子,为便于朗读,需要适当断句,甚至在句子结构要求上不需要断句的地方断句。
如:政府机关干部、特别是领导干部及其家属、身边工作人员,不能以任何形式干预、操纵工程招投标活动。
----注意下划线逗号。
*为了使增强语言美感,读起来铿锵有力,相邻句子通常结构统一。特别是连续两句以上的动宾结构短句,如:深化改革开放,拓宽发展空间。
2、从语法学看公文语言。汉语语法学是中国人模仿了西方语言的语法建立起来的。最早的汉语语法是《马氏文通》。相比西方语言的语法,汉语语法比较简单,西方语言的语法中的许多规范,汉语语法没有建立起来。如时态、语态方面的规范,词性的规定相对简单。动词,汉语对瞬间动词、延续动词的规定没有西方语言那么清晰而严格。
*注意虚词的运用。
“我们将以这次会议的召开为契机,……”其中,“的”字可以省略。
有的不能省略。“……给我们提供了难得的学习机会……”“了”和“的”都不能省略。
*通常,如果二级以下标题有“要”字,正文开头不要用“要”。如:要提高工作效能。要深入开展效能提升年活动,优化业务流程……。“深入”前的“要”字可删除。
再如:由于历史和经济基础等方面的原因,……。此处“的”字可以省略。
*注意代词的运用,特别是指示代词。
如:我们在这里举行慈善广场奠基仪式。这是我市慈善事业发展的里程碑,也是我市重要的地标建筑之一。
--此句中,“这”所指不明,造成“指代歧义”。
*注意动词的运用。汉语动词不像英语动词那样复杂,没有时态、情态,也不受主语单复数影响,但公文写作中,动词的运用仍然是出错误比较多的词类。
如:今天,我们召开这次会议,主要是贯彻落实中央……会议精神,肯定成绩,重视问题,落实措施,推动县域经济又好又快发展。
---此句中,“肯定”和“重视”都是表状况或态度的动词,其中“肯定”可以认为是瞬间动词,而表达会议内容的此处动词应当是延续性的、表行为的。此两句需要改为“总结成绩,分析问题”。后面的“落实措施”需要改为“研究制定具体措施”,因为“落实”是一个长期的、会后过程。
*严格地讲,每个完整的子句都有一个动词。“在”既可以当动词,也可以当介词,但有些情况下,它只能是介词,如果当动词使用,会造成句子没有动词。
如:临沂已经在一个新的起点上了。
*要注意动词与“被动”词的搭配。
如:在说到我市近几年经济社会发展很快时,说:
外地客商对我市尊重有加、信任有加。
*要注意名词与形容词的搭配。
如:……存在保护力度不够严的问题。
再如:……开采加工水平粗放。
*注意介词的运用。
介词其实是一类虚词,多数情况下其前不能有形容词,不能以形容词限制或修饰介词。
如:认真按照市委的部署要求,……。
(“严格按照……”句型除外)
如:立足规范抓整治,……
---“立足”既有动词性,也有介词性。此句改为“着眼规范抓整治"更合适。
重视辨析长句子。特别要重视主、从结构的长句子。有时因为句子太长,会造成结构缺失或扭曲。特别是“以”字句、“把”字句和“通过……”、“按照……”、“在……正确领导下,”等句型,经常会出现结构问题。
如:
(1)要把教师队伍建设作为教育事业发展的关键环节,加强教师队伍建设,维护教师合法权益。
---从句不能与主句重复。
(2)要及时掌握危险分子针对世博会、亚运会和我市重要会议、重大赛事策划、组织、实施暴力恐怖活动的情报,……。
---句子太长、词汇罗列太多。
(3)发展优质高效农业,打造更多特色产业和产品,是农民名副其实的摇钱树。
---主语模糊。
(4)要把教师队伍建设作为教育事业发展的关键环节,加强教师队伍建设,维护教师合法权益。
---从句不能与主句重复。
(5)我市以“两型社会”建设改革为机遇,统筹推进生态建设,取得明显成效。
---主句中的概念不能是从句中概念的一部分。应当该为:抓住省政府确定我市为全省“两型社会”建设改革试点城市的机遇,……。
(6)我市相继开展了打击添加非食用物质和食品添加剂、含瘦肉精、塑化剂等有害物质食品、农村及校园周边
食品、地沟油及餐厨废弃物以及节日性、季节性食品的一系列专项行动。
----句子结构不全、缺项,动宾搭配不合理,概念不当并列。
*公文要求句子简洁,句子结构上不多、不少、不扭曲。句子意思完整、没有歧义;句子结构不缺项,主、谓、宾、补、定、状,该有的都有。
如:……以与人民群众生活密切相关的食品为重点
----下划线部分多余,句子不简洁。
如:我市是“吃饭型”财政。(不当省略,主语缺失)
*重复,是公文的大忌。重复造成文字不简洁,最常见的情况,一是同一概念不断重复,二是不同层次语义交叉。
前者如:持续加大县乡环境卫生工作力度,各项工作稳步推进。----这两句有两个不合适:前句中的“县乡环境卫生工作”的内涵事实上与后句中“各项工作”的内涵没有区别;两句重复了“工作”俩字。
再如:大力实施项目带动发展战略,坚持把项目建设作为扩大内需、拉动增长的主导力量,以项目聚集生产要素,以项目带动投入增加,以项目增创发展优势。千方百计增项目,加大招商引资力度,全力招引基地型、龙头型项目。
----此段八句话,重复了六个“项目”。
再如:大力开展农民专业合作社“示范社建设行动”,每县区重点培育20-40家不同类型的专业合作社示范社,推动合作组织由松散型合作向紧密型合作转变,……。(合作、专业合作社概念太多。)
如:我市装备制造业通过加快结构调整,转变增长方式,行业经济有了跨越式发展……。
---主语重复。
*要注意,同一概念不能在同一句子、相邻和相近的句子中连续出现;同一词汇不能在同一句子中连续出现。
如:加强以政务服务中心为主要载体的政务服务体系建设。
---“政务服务”不能在同一句子中出现。
“和”字不能出现在同一句子中。
如:把思想和行动统一到党中央、国务院和省委、省政府的决策部署上来。
有的情况下,句子可以适当省略。如:兴业银行落户临沂,是兴业银行济南支行落实“内涵提升和外延扩张联动”发展战略的重要举措。“兴业银行济南支行”可以省略。这里,严格地讲,“落实”一词之前,应当有主语(济南支行),但,此处显然省略更好。
什么时候可以省略,什么时候不能省略,要认真把握。
没有主语,有时是祈使句,这是语法允许的;有时是无主句,通常是语法不允许的。
关于一段之中的层次问题。
理清层次。部署措施不能与达到的目标搅浑在一起。一般地,几个层次的措施表述完了,才可以表述目标或效果。
我们可以把层次划分为议论性、叙述性和要求性层次。一段内,如果同时有议论性、叙述性和要求性层次,一般地,要先叙述,再议论,最后提要求。注意,提要求的层次,要尽可能放最后提出来。
如:每一段落,层次不能太多,一般不超过四个;每一大部分,段落不能太多。以免显得罗嗦、杂乱。特别是开头的“帽”部分,一般两三个层次就可以。如果层次太多,会显得“皮厚”。
在领导讲话稿中,第一部分,总结成绩、分析问题和形势,应当把提要求的内容放到一处,不能两次提要求。
第二和第三部分,领导在对某项工作提要求时,某一段中,一个完整的层次,通常有措施、有目标或效果,这里注意,目标或效果的文字,要与本层次措施对称。中间层次,表完措施之后,一定不能有表达总目标的文字。
起草领导讲话稿不仅要考虑语句通顺、文字没有简洁,还要考虑多方面因素。
看听众,对下属有对下属讲话的语气;对外来客人,如果是省外客人,致欢迎辞要介绍临沂历史、区位、资源等概况,对本省客人,就没有必要介绍这些内容了。
对上级汇报,主要内容是工作成绩、问题和下步打算,一般不能发表太多的议论,不能写成调查与思考。
看讲话者身份。市长讲话有市长讲话的内容,市委书记讲话有市委书记讲话的内容,县长讲话有县长讲话的内容。有的同志在为市长起草的讲话稿中,出现“沂南金矿扩建工程的实施,对沂南县经济发展将起到巨大的推动作用。”这样的句子,此为讲话角度有问题。
看环境。考虑讲话者是站着讲话还是坐着讲话,天气是晴朗还是阴天。“今天,阳光明媚……”这样的句子一般要慎重运用。
要把公文语言与散文、诗歌语言区别开来。诗歌、散文可以不考虑逻辑规范,如:《中华民谣》的歌词:朝花夕拾杯中酒,寂寞的人而在风雨之后,醉人的笑容你有没有,大雁飞过菊花插满头……,基本看不出前后的逻辑性。
看讲话涉及的工作性质。有的讲话是针对非常具体某项工作,那么就不要太多地上纲上线,讲稿的框架也不要三大段。
注意标题的层级。
层次序号采用:一、(一)、1、(1)。其中,一级标题内容更丰富,通常两句以上;二级及以下标题通常简洁一些。同层级标题的句式、结构一般都相同。
要把握好“文以意为主”原则,抓住材料的根本内容,精心提炼,准确表达思想内涵,意、辞兼顾,拟出意深辞新的标题。
要尽力避免“通用标题”,如下面:
一、充分肯定成绩,分析存在问题,切实增强责任感和紧迫感
二、突出重点,落实措施,全面完成目标任务
三、加强领导,落实责任,形成齐抓共管合力。
第二篇:“小逻辑” 当代艺术的语言编码与话语表述
展览时间:2014-09-14至2014-11-13
展览地点:北京芳草地画廊
时值侨福芳草地两周年庆,芳草地画廊如期举办2014年芳草地艺术节,本届艺术节于2014年9月14日在芳草地画廊(侨福芳草地)和芳草地画廊798(798艺术区)同时开幕。
作为一个哲学概念,“小逻辑”来源于黑格尔。借助“小逻辑”的观念,我们力图强调的是,今天当代艺术的特点之一,正在于它比以往更注重语言的内部逻辑,及其观念生成时所依托的艺术史上下文。尽管直到20世纪80年代中期,中国的当代艺术才开始出现观念艺术,但在过去三十多年的发展中,围绕语言、修辞、叙事的建构所呈现出发展轨迹,及其所达到的思想高度,同样有其独特的价值。
本次展览将有40位艺术家参加,作品的形态包括架上绘画、装置、雕塑等。虽然作品在主题上各有差异,但它们也有一些共同点,都比较重视个人的创作方法论,对既有的视觉图像、视觉文化资源进行开拓性的使用,均强调作品在新的视觉机制与观看效果中产生意义。
第三篇:现代公文写作与处理:公文要素之公文语言
现代公文写作与处理:公文要素之公文语言
一、公文语言的特点
(一)准确性
要使公文语言做到准确无误,要注意以下几点:.概念准确,避免歧义。.措词得体,防止误用。.把握分寸,褒贬适当。.前后照应,杜绝矛盾。.细心检查,排除错漏。
(二)简洁性
要做到公文语言的简洁,主要有以下几点:.开门见山,直陈其事,不要兜圈子,玩文字游戏,说空话、套话。.使用规范化公文用语。.使用规范化简称。.多用陈述句、祈使句,少用描写句、疑问句或感叹句。.慎用多义词,避免使用容易产生歧义的词语。
(三)庄重性
具体说来要注意几下几点:.注重客观性。.使用书面语。.使用专用语。
(四)规范性
要注意以下几个方面:.要使用规范的文字,不写错别字,不用不规范的简化字。.要使用规范的词语,尤其是具有特定含义的专用词语。不生造词语。不用半文半白、生捏硬拼的词语。.要正确使用标点符号。.要按国家标准使用汉字数字和阿拉伯数字。
二、公文语言的词汇
(一)称谓语
称与对方有关的事物常用“你”,如“你省”、“你部”。如是平行文则宜用敬辞“贵”,如“贵部”、“贵局”、“贵市”、“贵会”、“贵社”、“贵公司”、“贵单位”等。
称与自己有关的事物常用“我”、“本”,如“我省”、“我部”、“我局”、“本公司”、“本会”等。
公文中间接称呼有关的人或单位常用“该”,如“该同志”、“该人”、“该地区”、“该单位”等。
(二)起首语
对下级机关或人民团体来文有所批复时,起首常用“关于《……的报告》收悉”、“关于……的电文已悉”等。
《通知》常用“为了……”开头。
(三)承启语
在公文的缘由表述完毕后,常用“为此,特作如下通知”、“特此命令你们”等领起下文。
(四)结尾语
是各类公文正式结尾时表收束、强调、祈请等的用语,可用“以上各项,望各地遵照执行”、“请结合本地区、本部门实际情况,认真贯彻执行”、“是否有当,请予批复”、“当否,请批示”、“请予审批”、“以上报告如无不妥,请批转各地、各有关部门执行”。
三、公文用词的特殊性
所谓公文用词的特殊性,是指公文有一套较常用的专用词语,这些词语用起来能体现公文的严肃性和准确性。
开头用语有:“按照”、“为了”、“根据”、“鉴于”、“依照”、“据查”、“关于”、“报告悉”、“电悉”、“奉”、“查”、“前奉”、“据”、“……报称”、“……电称”、“制定”、“特派”、“任命”、“兹聘”、“派”、“惊悉”、“阅悉”、“谨悉”等。
结尾用语有:“望”、“请”、“特此函告”、“为盼”、“是否可行”、“当否”、“请批示”、“祈请批复”、“盼回复”、“望遵照执行”、“特此通知”、“请批转……执行”、“特此布告”、“此复”、”此致”、谨呈”、“谨报告”、“特此电陈”、“此令”、“此批”、“此布”、“此令”、“为荷”等。
过渡用语有:“为此”、“为此……特……”、“对比……”、“为……”、“结合……”等。
称谓用语有:“贵省”、“贵局”、“该地区”、“我市”、“我县”、“本镇”等。
表时间的模糊词语有:“最近”、“近期”、“适当时候”、“现在”、“将来”、“曾经”、“同时”、“有时”、“一直”等。、,表范围的模糊词语有:“有关”、“各部门”、“乡(县、市、省)内外”、“国内外”、“左右”、“上下”等。
表条件的模糊词语有:“在可能的情况下”、“在……情况下”、“在……基础上”、“符合一定条件”、“在特殊情况下”等。
表数量的模糊词语有:“许多”、“多数”、“广大”、“某些”、“有此”,“一些”、“个别”、“部分”等。
表程度的模糊词语有:“很”、“一般”、“更加”、“进一步”、“基本上”、“显著”、“一定……”、“较”等。
表频率的模糊词语有:“经常”、“不断”、“有时”、“反复”、“再三”、“多次”、“偶尔”等。
四、公文写作常用词语
在长期的公文写作实践中,由于行文关系和处理程序的需要,公文逐渐形成了一套常用的专用词语。
五、公文语言的表达方式
在公文写作中,常用的表达方式主要有三种,即叙述、议论和说明。
(一)叙述
叙述是一种叙说、介绍人物经历和事物发展过程的表述方式。叙述常用两种人称(也就是立足点的问题),一种是主观的第一人称,另一种是客观的第三人称;但具体到一篇公文中,通常只用一个人称,主观或客观,不能主客观混用。叙述按时间顺序可以分为顺叙、倒叙、插叙、补叙和分叙,常用的叙述方式只有顺序、倒序和插叙。
1.顺叙
所谓顺叙,就是按照事情发展的顺序来叙述,从发生、高潮到结局一脉相承;层次段落和事物发展过程基本一致。
2.倒叙
所谓倒叙,就是把事件的结局或最突出、精彩、富有吸引力的文段,提到前面叙述,然后再从事件的开头顺叙下来的表达方式。
3.插叙
所谓插叙,就是在原来的叙述进程中,暂时中断一下,插入另一段叙述,插叙完后再接着原先叙述的线索继续进行下去。
4.补叙和分叙
所谓补叙,就是整个事件进程叙述完了之后,再补充交代一下个别地方的表达方式。所谓分叙,就是对同一时间内发生在不同地方或单位的事件,先叙述一件再叙述另一件的表达方式。这两种方式在公文中都用得不多。
叙述的基本要求:一是语言要概括。二是交代要明白。三是详略要得当。
(二)议论
议论是阐明事理、发表见解、表明观点的一种表达方式,它的主要目的是以理服人。议论的特点是运用概念、判断、推理的思维手段来议事论理,在许多情况下,它与叙述常被结合起来使用,此即所谓的夹叙夹议。
1.议论的三要素
议论有三个要素:论点、论据和论证。一般而言,这三个要素都是不可缺少的。
论点就是公文作者的观点、主张和看法,是论据所要证明的对象。论点回答的“是什么”的问题,因此,论点必须明确、鲜明、深刻和具有针对性。论点有中心论点和分论点之分。
论据是议论中所使用的材料,用来证明论点的理由和依据。论据回答的是“为什么”的问题,因此,论据必须可靠、充实和典型。论据分为事实论据和理论论据。
论证是用论据来证实论点正确的过程。论证要回答的是“怎么样”的问题,因此,论证要求以理服人、有的放矢,有严密的逻辑性,做到无可辩驳。
论点、论据和论证是公文“议论”中不可分割的三个因素,它们分别回答了“是什么”、“为什么”和“怎么样”的问题。它们之间的关系是:论点是主题和统帅,论据是支柱和基础,论证是方法,也是论点和论据之间的逻辑联系。
2.议论的方法
公文中议论的方法也就是论证的方法,论证主要是指立论。一般说来,公文中常用的议论方法有例证法、引证法、比照法和因果推论法。
例证法就是以事实为论据,通过列举事实来证明论点的一种方法。
引证法就是以观念材料为论据,通过引用经典论著、科学定理、格言成语等来证明论点的一种方法。
比照法就是把相同或相反属性的事物和一个事物的不同侧面列举出来,经过对照或比较得出自己观点的议论方法。
因果推论法就是由原因推导结果,或反过来由结果推导原因的论证方法。
议论常与叙述紧密结合在一起,表现为“夹叙夹议”的方式。夹叙夹议就是一边摆事实,一边讲道理。运用这种方式要请注意两个问题,其一,叙述要真实、典型,议论要中肯、精辟;其二,事实与道理要和谐一致,防止出现事大理小或事小理大的错位现象。
(三)说明
所谓说明,就是用简练的语言对事物的状态、性质、特征、成因、关系、结构等进行解释的表达方式。它常用来解说事物和阐明事理,是公文写作中最核心的表达方式,常与叙述和议论结合在一起使用。
说明的方法非常多,常用的包括定义说明、举例说明、比较说明、分类说明、数字说明、引证说明、解释说明。
1.定义说明
所谓定义说明,就是用简明扼要的语言揭示事物的本质属性,从而给人以一个明确的概念。
2.举例说明
所谓举例说明,就是通过列举事例来揭示诸种事物的共同特征。
3.比较说明
所谓比较说明,就是通过对不同事物的相互比较来揭示诸种事物的内在联系与区别。
4.分类说明
所谓分类说明,就是把被说明的事物,按照一个统一的标准划分为若干类别,然后逐类加以说明。
5.数字说明
所谓数字说明,就是运用数字和数据,从数量上对事物的情况和特征加以说明。
6.引证说明
所谓引证说明,就是运用权威性的材料来说明事物。
7.解释说明
所谓解释说明,就是对事物或事理的某一方面加以解说,也称诠释说明。
第四篇:机关五四青年节演讲稿与机关公文应讲究语言文采
机关五四青年节演讲稿
税务系统五四青年节演讲稿
在我心里,五月四日不是一个普通的日子,而是代表中国青年的节日。它总是很自然让我回想起
“五四”运动,回想起中国的青年为了祖国和人民的命运而作的斗争;现在的人都爱用“情结”二字,听起来好像一种迷恋,一种怀旧。其实总有一些东西是不老的、永恒的,比如“五四”精神。我理解的“五四”精神是自由、民主、爱国,是锐意进取,这些在任何时代都是应该继承和发扬的。弹指间灰飞烟灭,历史的车轮在泥泞的土路上留下了长长的车辙。那个世界的悲惨与悲凉,那个时代的黑暗与残酷,那个社会的风雨飘摇,似乎都已经随着那车轮远去了。开端也罢,“分水岭也罢,革命也好,斗争也好,过去的值得纪念,但是更重要的该是留存下来的一种精神,一种“五四”所带来的英勇与坚强、果敢与奋进、热忱与理想、不屈与抗争的精神。这种精神不该随风而逝,不该只凝固在那一个时代,不该只是用来纪念。
转眼间,人类已昂首进入了二十一世纪,在这漫长的岁月里,中国战胜了衰落,走向振兴,挣脱了屈辱,走向奋起,中国正以崭新的姿态向世人展示着自己,然而,人们不会忘记那划时代民族救国的“五四”爱国运动,更不会忘记那举起民族救国旗帜,开创民族独立和民族振兴新纪元的先驱者,不会忘记革命战争的峰火硝烟,更不会忘记,为真理而抛头颅洒热血的英烈们。今日,我们的祖国已经进入了一个新的历史时期,振兴中华的责任,已经落到我们肩上,“五四”火炬已经光荣地传到我们手中。
为了秉承民族精神,高举“五四”火炬,作为一名共和国的税务人,弘扬“五四”精神,做好一名真正的税务人在新时代下显得如此重要。崭新的世纪大门已为我们开启。每个人都渴望祖国建设的步伐不断迈进。我们,一群为国聚财的税务官,一群共和国的收税人,更要继承“五四”精神,加强道德建设,加强自身修养,才能对得起这身海蓝的税服,对得起头顶的国徵,才能自豪地说一声,我是一名真正的税务人。
做一名真正的税务人,我们就要赤诚。对国家赤诚,对人民赤诚。如果把祖国比作母亲,税收就是母亲身上的血脉。那么我们——共和国的收税人,就是为伟大母亲献血的孩子,我们就要永远对母亲怀有一颗赤子之心。今日,我们税务人面对着各种以高科技为背景的经济挑战,这就要求我们以聪慧的大脑、广博的知识、睿智的心灵和火一般的激情去为祖国谱下华彩乐章!真正的税务人,便是那巍巍国魂下永不变心、永不褪色的赤诚!
做一名真正的税务人,我们就要敬业。弘扬“五四”精神不只是口号,而是一种行动。社会日新月异,不进则退。随着加入wto后,要求我们掌握更多更新的税务知识。敬业就是要我们热爱税收,踏实肯干,不断学习,不断进取。身穿税服,心系税务。前面收税的道路尽管很崎岖,需要在烈日下我们顶着酷暑下乡,需要在暴风雨中我们迎着狂风深入企业。但是,为了共和国的税收,我们无怨无悔。真正的税务人,便是那不怕苦不怕累日益进取的敬业精神。
展望未来,我们将在“五四”精神的指导下,追求卓越、奋力拼搏、有效执行、不断超越自我。
我们坚信,有“五四”清泉的滋养、有“五四”清风的沐浴,我们一流的**地税人,一定会让**地税更加辉煌!
我的演讲完毕,谢谢各位。
机关公文应讲究语言文采
提起机关公文,不少拟写者厌倦,认为没写头;更多的阅读者皱眉,认为没看头。这倒使我想起1942年毛泽东同志在延安干部会上所作的《反对党八股》的讲演中列举的党八被的罪状。其中的“空话连篇,言之无物”、“语言无味,象个瘪三”、“甲乙丙丁,开中药铺”,倒是言中了我们当今公文中的一个十分严重,却又末被充分认识的问题。这就是缺少文采,甚至根本没有文采,成了当今公文的一个通病。
为什么55年前毛泽东同志指出的问题,今天重又出现呢?这有多方面的原因:
一是历史的原因。古人写文章是很讲究文采的,孔子说;“言之无文,行而不远”,这是十分中肯的意见。一部《论语》,不但是孔子和他的弟子的思想和学问体现,其语言的精炼、优美、含蓄,也是古代文章的典范。后世的学者也都很注重文章的文采,人们所以爱读司马迁的《史记》,不只是为了了解历史,还常常是出于欣赏文章的文采。至于诸葛亮的《出师表》、陈琳的《为袁绍檄豫州文》等虽属公文,也是很有文采的。但是,自从文学与其他学科显著地分途以来,有些非文学作品的作者对于文章,特别是对公文的文采便有所忽视。宋代以后,甚至有“作文害道”之说。清代某些主张经世致用的学者,更有轻视文采的倾向。到了本世纪40年代则有“党八股”的出现。以上可以说是历史的原因。
二是认识上的原因。不少人对公文语言必须庄重、朴实的要求作了片面的理解,以为庄重就不能抒发情感,朴实就不能使用华丽的词句。于是公文语言在运用上便越来越枯燥乏味,在表情达意上便越来越平淡浮浅,好似患了“贫血”病和营养不良症。又有不少人认为公文属于应用文,又不是文学作品,只要通俗、明白、易懂就行了,要什么文采?于是不少公文便只有抽象的道理,缺少具体的形象;便只有一二三四的叙述,没有生动鲜明的论证。这就是毛泽东同志所说的那种“不生动,不形象,使人看了头痛”的文章。还有一些人则死守着公文的既定框框和固有程式,不敢超越雷池一步。所以,如今虽说谁都认为毛泽东的文稿很有文采,也常以他的《湖南农民运动考察报告》作为范文。可要是谁真的象毛泽东那样撰写调查报告,恐怕十个有十个要以“不合规范,没有章法”被“毙”掉。而我们经常接触到的一些调查报告,虽然是既合规范,又有章法,却是没了生气,没了个性,形式呆板,语言枯燥,不要说群众不愿意看,就连自己读起来也味同嚼蜡。
三是作者的原因。领导懒于动笔是其一。领导在办文上如何使用秘书,毛泽东同志对此讲得最多,最尖
锐,也最深刻。他历来主张领导自己动手,不要秘书代劳。可是现在又有多少领导亲自动手写文章呢7有的同
志原本是写文章的,文笔也不错,但一当了领导就“马放南山,刀枪入库”了。如今,大领导不写,小领导也不写,甚至不写文章的办公室主任也大有人在。曹操、王安石等古代将相的文章为什么很有文采,毛泽东、邓小平等老一辈无产阶级革命家的文章为什么很有文采,原因尽管是多方面的,但自己动手,不要秘书代劳,是一个重要原因。领导着一个方面的工作,甚至是领导着一项伟大事业的领导干部,其呕心沥血的辛劳,其屡经挫折的感慨,其运筹帷幄的灵感,其百战百胜的激情,绝非秘书所能感受,更非秘书所能写出。唯有领导亲自动笔,才能情感洋溢,异彩纷呈。缺乏真情实感是其二。公文虽属受命之作,但若没有真挚的情怀,实际的感受,也是不可能写出文采的,更不可能以这样的文章去感染、感动他人。如《转发××××通知的通知的通知》之类的“接力”文;既无新内容,也无新举措,更无新精神,年年如此的“季节”文;照顾方方面面,大段摘抄引证,不能不发的“应景”文。还有一些要求下级令行禁止的公文,需要深入调查研究才能写好的公文,本人却不令行禁止,自己从不下去,又让秘书闭门造车,又怎能写出文采呢?素质太差勉为其难是其三。多数机关工作人员,包括秘书原)中吸取营养,充实写作功底。
三要端正写作态度。以高度的责任感、爱憎分明的激情、勤奋踏实的精神从事公文写作,敬业爱岗而淡泊
名利,做到反复推敲,字斟句酌。
四要开展优秀公文评选,把有无文采作为评定优秀公文的重要标准,改变重公文格式,轻公文文采的倾问。
五要提倡领导亲自撰写公文和提拔一批秀才担任领导,把写作能力作为选拔领导干部的重要标准,把亲自拟写文章作为考核领导干部的重要内容。
六要建立主笔责任制,据弃一人写一部分的,拼凑材料的写作方法。提倡由主笔人拟定思路,一气呵成,其他人只负责提供素材的写作办法。
第五篇:文件传输协议的简单设计与实现(c语言.
文件传输协议的简单设计与实现(c语言,VC6.0)使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1)创建Socket;
(2)打开连接到Socket的输入/出流;
(3)按照一定的协议对Socket进行读/写操作;
(4)关闭Socket.第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。
/****************client.c****************/ #include
//DWORD dwCount = DEFAULT_COUNT;// Number of times to send message BOOL bSendOnly = FALSE;// Send data only;don't receive int dirfun();int getfun();int putfun();int pwdfun();int cdfun();int mdfun();int delfun();int usafun();
void usage(){ printf(“usage: client [-p:x] [-s:IP] [-n:x] [-o]nn”);printf(“-p:x Remote port to send ton”);printf(“-s:IP Server's IP address or hostnamen”);printf(“-n:x Number of times to send messagen”);printf(“-o Send messages only;don't receiven”);ExitProcess(1);} void ValidateArgs(int argc, char **argv){ int i;
for(i = 1;i < argc;i++){ if((argv[i][0] == '-')||(argv[i][0] == '/')){ switch(tolower(argv[i][1])){ case 'p': // Remote port
if(strlen(argv[i])> 3)iPort = atoi(&argv[i][3]);break;case 's': // Server
if(strlen(argv[i])> 3)strcpy(szServerip, &argv[i][3]);break;case 'n': // Number of times to send message
if(strlen(argv[i])> 3)//dwCount = atol(&argv[i][3]);
break;case 'o': // Only send message;don't receive
bSendOnly = TRUE;break;default: usage();break;} } } } int main(int argc, char **argv){ WSADATA wsd;SOCKET sClient;char szBuffer[DEFAULT_BUFFER];int ret;//unsigned int i;
//int j;
struct sockaddr_in server;struct hostent *host = NULL;char choice[5],choice2[40];// Parse the command line and load Winsock
//
argv[1]=“-s:127.0.0.1”;strcpy(szServerip, &argv[1][3]);//ValidateArgs(argc, argv);if(WSAStartup(MAKEWORD(2,2), &wsd)!= 0){ printf(“Failed to load Winsock library!n”);return 1;} //strcpy(szMessage, DEFAULT_MESSAGE);
//
// Create the socket, and attempt to connect to the server
//
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(sClient == INVALID_SOCKET){ printf(“socket()failed: %dn”, WSAGetLastError());return 1;} server.sin_family = AF_INET;server.sin_port = htons(iPort);printf(“server.sin_port=%un”,server.sin_port);server.sin_addr.s_addr = inet_addr(szServerip);//
// If the supplied server address wasn't in the form
// “aaa.bbb.ccc.ddd” it's a hostname, so try to resolve it
//
if(server.sin_addr.s_addr == INADDR_NONE){ host = gethostbyname(szServerip);if(host == NULL){ printf(“Unable to resolve server: %sn”, szServerip);return 1;} CopyMemory(&server.sin_addr, host->h_addr_list[0], host->h_length);} if(connect(sClient,(struct sockaddr *)&server, sizeof(server))== SOCKET_ERROR){ printf(“connect()failed: %dn”, WSAGetLastError());return 1;} //显示接通信息
//
//
//for(j=0;j<2;j++)
//
{
ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0);if(ret == 0)// Graceful close
return 0;else if(ret == SOCKET_ERROR){ printf(“recv()failed: %dn”, WSAGetLastError());return 0;} szBuffer[ret] = ' ';printf(“%sn”,szBuffer);if(ret<15){ ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0);if(ret == 0)// Graceful close return 0;else if(ret == SOCKET_ERROR){ //printf(“recv()failed: %dn”, WSAGetLastError());
return 0;} szBuffer[ret] = ' ';printf(“%sn”,szBuffer);} //printf(“DEFAULT_BUFFER=%dn”,DEFAULT_BUFFER);
} while(1){
puts(“-----------”);printf(“ftp> ”);scanf(“%s”, choice);
if(strncmp(choice,“dir”,3)==0||strncmp(choice,“DIR”,2)==0){ dirfun(sClient);continue;}
else if(strncmp(choice,“pwd”,3)==0||strncmp(choice,“PWD”,3)==0){
pwdfun(sClient);continue;} else if(strncmp(choice,“?”,1)==0){ usafun(sClient);continue;} else if(strncmp(choice,“quit”,4)==0||strncmp(choice,“QUIT”,2)==0){ break;} scanf(“%s”, choice2);if(strncmp(choice,“get”,3)==0||strncmp(choice,“GET”,3)==0){ getfun(sClient,choice2);continue;} else if(strncmp(choice,“put”,3)==0||strncmp(choice,“PUT”,3)==0){ putfun(sClient,choice2);continue;}
else if(strncmp(choice,“cd”,2)==0||strncmp(choice,“CD”,2)==0){ cdfun(sClient,choice2);continue;} else if(strncmp(choice,“md”,2)==0||strncmp(choice,“MD”,2)==0){ mdfun(sClient,choice2);continue;} else if(strncmp(choice,“del”,3)==0||strncmp(choice,“DEL”,3)==0){ delfun(sClient,choice2);continue;}
//else
puts(“输入错误,请重新输入”);fflush(stdin);fflush(stdin);printf(“n”);
printf(“n”);}
closesocket(sClient);
WSACleanup();return 0;} int dirfun(SOCKET sClient){ int ret;char *MSG=“dir$”;char szBuffer[80];strcpy(szMessage, MSG);
ret = send(sClient, szMessage, strlen(szMessage), 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(“send()failed: %dn”, WSAGetLastError());return 1;} //printf(“Send %d bytesn”, ret);//printf(“bSendOnly=%dn”,bSendOnly);
while(!bSendOnly){ //读取流并显示
//ret = recv(sClient, szBuffer, 80, 0);
//printf(“%s”,szBuffer);
ret = recv(sClient, szBuffer, 80, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(“recv()failed: %dn”, WSAGetLastError());return 1;} szBuffer[ret] = ' ';
if(strncmp(szBuffer,“226 Close”,strlen(“226 Close”))==0){ break;} printf(“%s”,szBuffer);if(strncmp(szBuffer,“500 Syntax error”,strlen(“500 Syntax error”))==0){ break;}
} return 0;} int getfun(SOCKET sClient,char filename[40]){ int ret;FILE *fpre;char szBuffer[80];
szMessage[0]=' ';strcat(szMessage, “get$”);//strcat(szMessage, “");
strcat(szMessage,filename);//printf(”MSG[4]=%cn“,szMessage[4]);
//szMessage[0]='g';szMessage[1]='e';szMessage[2]='t';
//
//szMessage[4]='m';szMessage[5]='e';szMessage[6]='.';szMessage[7]='t';
//
//szMessage[8]='x';szMessage[9]='t';szMessage[10]=' ';
ret = send(sClient, szMessage, strlen(szMessage)+1, 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(”send()failed: %dn“, WSAGetLastError());return 1;} printf(”Send %d bytesn“, ret);ret = recv(sClient, szBuffer, 80, 0);/*if(ret == 0)// Graceful close break;
else if(ret == SOCKET_ERROR)
{
printf(”recv()failed: %dn“, WSAGetLastError());
break;
}*/
szBuffer[ret] = ' ';printf(”%sn“,szBuffer);if(strncmp(szBuffer,”125 Transfering...“,strlen(”125 Transfering...“))==0){ if((fpre=fopen(filename,”w“))== NULL){ printf(”open errer“);return 1;} printf(”bSendOnly=%dn“,bSendOnly);while(!bSendOnly){ //读取流并显示
ret = recv(sClient, szBuffer, 80, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(”recv()failed: %dn“, WSAGetLastError());return 1;} szBuffer[ret] = ' ';
//printf(”%s“,szBuffer);
if(strncmp(szBuffer,”226 Transfer“,strlen(”226 Transfer“))==0){ break;} if(strncmp(szBuffer,”500 Syntax error“,strlen(”500 Syntax error“))==0){ break;} fprintf(fpre,”%s“,szBuffer);} printf(”%sn“,szBuffer);fclose(fpre);} return 0;} int putfun(SOCKET sClient,char filename[40]){ int ret;//int i;
FILE *fpse;//char *filename;
//char *MSG=”get me.txt“;
char szBuffer[80],temp_buffer[80];//sprintf(szMessage, ”get “,”te.txt “);
szMessage[0]=' ';strcat(szMessage, ”put$“);strcat(szMessage,filename);ret = send(sClient, szMessage, strlen(szMessage)+1, 0);if(ret == 0)return 0;else if(ret == SOCKET_ERROR){ printf(”send()failed: %dn“, WSAGetLastError());return 1;} //printf(”Send %d bytesn“, ret);
//filename=”me.txt“;
printf(”filename=%sn“,filename);if((fpse=fopen(filename,”r“))== NULL){ printf(”open errer“);return 1;} else
{ printf(”The file %s found,ready to transfer.n“,filename);//i=0;
while(fgets(temp_buffer,80,fpse)!=NULL){ sprintf(szBuffer,”%s“,temp_buffer);
send(sClient, szBuffer, 80, 0);} } sprintf(szBuffer, ”226 Transfer completed...rn“);
ret = send(sClient, szBuffer, strlen(szBuffer), 0);
fclose(fpse);return 0;} int pwdfun(SOCKET sClient){ int ret;char *MSG=”pwd$“;char szBuffer[160];strcpy(szMessage, MSG);ret = send(sClient, szMessage, strlen(szMessage), 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(”send()failed: %dn“, WSAGetLastError());return 1;} printf(”Send %d bytesn“, ret);printf(”bSendOnly=%dn“,bSendOnly);while(!bSendOnly){ //读取流并显示
ret = recv(sClient, szBuffer, 160, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(”recv()failed: %dn“, WSAGetLastError());return 1;} szBuffer[ret] = ' ';printf(”%sn“,szBuffer);if(strncmp(szBuffer,”226 Close“,strlen(”226 Close“))==0){ break;} if(strncmp(szBuffer,”500 Syntax error“,strlen(”500 Syntax error“))==0){ break;} } return 0;} int cdfun(SOCKET sClient,char pathname[40]){ int ret;
szMessage[0]=' ';strcat(szMessage, ”cd$“);strcat(szMessage,pathname);ret = send(sClient, szMessage, strlen(szMessage)+1, 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(”send()failed: %dn“, WSAGetLastError());return 1;} printf(”Send %d bytesn“, ret);
return 0;} int mdfun(SOCKET sClient,char pathname[20]){ int ret;char szBuffer[160];//char *MSG=”md$“;
szMessage[0]=' ';strcat(szMessage, ”md$“);//strcat(szMessage, ”“);
strcat(szMessage,pathname);//strcpy(szMessage, MSG);
ret = send(sClient, szMessage, strlen(szMessage)+1, 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(”send()failed: %dn“, WSAGetLastError());return 1;} printf(”Send %d bytesn“, ret);while(!bSendOnly){ //读取流并显示
ret = recv(sClient, szBuffer, 80, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(”recv()failed: %dn“, WSAGetLastError());return 1;} szBuffer[ret] = ' ';
printf(”%s“,szBuffer);
if(strncmp(szBuffer,”226 Close“,strlen(”226 Close“))==0){ break;} if(strncmp(szBuffer,”500 Syntax error“,strlen(”500 Syntax error“))==0){ break;}
} return 0;} int delfun(SOCKET sClient,char name[20]){ int ret;char szBuffer[80];szMessage[0]=' ';strcat(szMessage, ”del$“);
strcat(szMessage,name);ret = send(sClient, szMessage, strlen(szMessage)+1, 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(”send()failed: %dn“, WSAGetLastError());return 1;} printf(”Send %d bytesn“, ret);while(!bSendOnly){ ret = recv(sClient, szBuffer, 80, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(”recv()failed: %dn“, WSAGetLastError());return 1;} szBuffer[ret] = ' ';
if(strncmp(szBuffer,”del ok“,strlen(”del ok“))==0){ printf(”del %s okn“,name);break;} printf(”%s“,szBuffer);if(strncmp(szBuffer,”500 Syntax error“,strlen(”500 Syntax error“))==0){ break;}
} return 0;} int usafun(){ puts(”-----------“);puts(”get:取远方的一个文件“);puts(”put:传给远方一个文件“);puts(”pwd:显示远主当前目录“);puts(”dir:列出远方当前目录“);puts(”md :在远方新建文件夹“);puts(”cd :改变远方当前目录“);puts(”? :显示你提供的命令“);puts(”quit :退出返回“);return 0;} //int quit()
/****************server.c****************/ #include
#pragma comment(lib,”ws2_32.lib“)WSADATA wsd;
char sbuffer[80],rbuffer[80];//send and receive buffers int n,bytes;//counters SOCKET newsocket,ns_data;
struct sockaddr_in remoteaddr;//remoteaddr_data;int port_connect=0;//port connect flag char path[80]=”“;char order[100]=”“;//SOCKET s_data_port;
int sy_error=1;// use for indicate Syntax error //server functions
int sdirfun(SOCKET newsocket);int sgetfun(SOCKET newsocket);int sputfun(SOCKET newsocket);int spwdfun(SOCKET newsocket);int scdfun(SOCKET newsocket);int smdfun(SOCKET newsocket);int sdelfun(SOCKET newsocket);void HandleError(char *func);//server functions end //MAIN
int main(int argc, char *argv[]){
struct sockaddr_in localaddr;//local address structure
SOCKET s;//s_data;//welcome socket and welcome socket for data connection,and port connection for connect to client
if(argc == 2)localaddr.sin_port = htons((u_short)atoi(argv[1]));localaddr.sin_port = htons(2302);else
localaddr.sin_addr.s_addr = INADDR_ANY;localaddr.sin_family = AF_INET;if(s <0){
} printf(”socket failedn“);int addr_inlen;//address lenght variable if(WSAStartup(MAKEWORD(2,2), &wsd)!= 0){
}
memset(&localaddr,0,sizeof(localaddr));//clear localaddr s = socket(PF_INET, SOCK_STREAM, 0);WSACleanup();
printf(”WSAStartup failedn“);
//INFINITE LOOP while(1){ // while loop 1
listen(s,3);
addr_inlen = sizeof(remoteaddr);//LISTEN
if(bind(s,(struct sockaddr *)(&localaddr),sizeof(localaddr))< 0){
} printf(”Bind failed!n“);//ACCEPT main connection(control connection)
newsocket = accept(s,(struct sockaddr *)(&remoteaddr),&addr_inlen);if(newsocket == INVALID_SOCKET)break;
printf(”connected to %s at port %d n“,inet_ntoa(remoteaddr.sin_addr),ntohs(localaddr.sin_port));
//Respond with welcome message, FTP client requires those
sprintf(sbuffer,”200 Welcome rn“);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);sprintf(sbuffer,”530 Log in rn“);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);while(1)// while loop 2 {
n = 0;sy_error=1;
while(1)// while loop 3 {
bytes = recv(newsocket, &rbuffer[n], 1, 0);printf(”rbuffer[%d]=%cn“,n,rbuffer[n]);if((bytes < 0)||(bytes == 0))
break;
if(rbuffer[n] == '$'){
}
if(rbuffer[n]!= 'r')
n++;
rbuffer[n] = ' ';break;//INFINITE LOOP
//RECEIVE
//THE FTP COMMANDS HERE //LIST
if(strncmp(rbuffer,”dir“,3)==0){ sdirfun(newsocket);
} // end of while loop 3
if((bytes < 0)||(bytes == 0))break;
printf(”#The Server receives:# '%s' from client n“, rbuffer);
} //当前目录
if(strncmp(rbuffer,”pwd“,3)==0){
}
if(strncmp(rbuffer,”cd“,2)==0){
} scdfun(newsocket);spwdfun(newsocket);
//改变目录
//GET
}
if(strncmp(rbuffer,”put“,3)==0){
}
if(strncmp(rbuffer,”md“,2)==0){
}
if(strncmp(rbuffer,”del“,3)==0){
}
if(strncmp(rbuffer,”quit“,4)==0){
} printf(”quit n“);
sprintf(sbuffer, ”221 Bye bye...rn“);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);sy_error=0;break;sdelfun(newsocket);smdfun(newsocket);sputfun(newsocket);//PUT
if(strncmp(rbuffer,”get“,3)==0){ sgetfun(newsocket);
//MD
//QUIT
//Syntax error
//CLOSE CONTROL SOCKET
} // end of while loop 1 closesocket(s);
printf(”Welcome sockets close“);return 0;
closesocket(newsocket);
printf(”disconnected from %s at port %d, close control socket.n“,inet_ntoa(re
if(sy_error==1){
} printf(”command unrecognized, non-implemented!n“);sprintf(sbuffer, ”500 Syntax error.n“);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);
} // end of while loop 2
moteaddr.sin_addr),ntohs(localaddr.sin_port));
//CLOSE WELCOME SOCKET
}
int sdirfun(SOCKET newsocket){
char temp_buffer[80];
printf(”Equivalent to dir n“);
order[0]=' ';strcat(order,”dir “);strcat(order,path);strcat(order,” >tmp.txt“);system(order);FILE *fin;
fin=fopen(”tmp.txt“,”r“);
sprintf(sbuffer, ”125 Transfering...rn“);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);while(fgets(temp_buffer,80,fin)!=NULL){
}
fclose(fin);
sprintf(sbuffer, ”226 Transfer completed...rn“);sprintf(sbuffer,”%s“,temp_buffer);// if(port_connect==0)send(newsocket, sbuffer, strlen(sbuffer), 0);
}
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);system(”del tmp.txt“);
//CLOSE the ns_data SOCKET or data port SOCKET if(port_connect==0){
}
sy_error=0;return 0;closesocket(ns_data);
sprintf(sbuffer,”226 Close the data socket...rn“);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);ns_data = socket(AF_INET, SOCK_STREAM, 0);
int sgetfun(SOCKET newsocket){
int i=4,k=0;
char filename[20],temp_buffer[80];
// identify the filename from rbuffer after the word ”RETR “ while(1)// while loop 4 {
bytes = recv(newsocket, &rbuffer[i], 1, 0);printf(”rbuffer[i]=%cn“,rbuffer[i]);if((bytes < 0)||(bytes == 0))break;
filename[k]=rbuffer[i];if(rbuffer[i] == ' '){ /*end on LF*/
}
if(rbuffer[i]!= 'r'){
} i++;
k++;/*ignore CR's*/ filename[k] = ' ';break;printf(”RETR mode.rn“);
//RECEIVE
} // end of while loop 4 order[0]=' ';
e);
}
strcat(order,path);if(strlen(path)>0)strcat(order,”“);strcat(order,filename);char *p_filename=order;FILE *fp;
if((fp=fopen(p_filename,”r“))== NULL){ sprintf(sbuffer, ”Sorry, cannot open %s.Please try again.rn“,filenam
} bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);sprintf(sbuffer, ”226 Transfer completed...rn“);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);return 1;
else {
printf(”The file %s found,ready to transfer.n“,filename);sprintf(sbuffer, ”125 Transfering...rn“);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);while(fgets(temp_buffer,80,fp)!=NULL){
sprintf(sbuffer,”%s“,temp_buffer);// if(port_connect==0)
send(newsocket, sbuffer, strlen(sbuffer), 0);
}//end of while fclose(fp);
sprintf(sbuffer, ”226 Transfer completed...rn“);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);
}
sy_error=0;
return 0;
int sputfun(SOCKET newsocket){
printf(”Equivalent to put.n“);
int i=4,k=0;char filename[20];
// identify the filename from rbuffer after the word ”RETR “ while(1){
bytes = recv(newsocket, &rbuffer[i], 1, 0);if((bytes < 0)||(bytes == 0))break;
filename[k]=rbuffer[i];if(rbuffer[i] == ' '){ /*end on LF*/
}
if(rbuffer[i]!= 'r'){
} i++;
k++;/*ignore CR's*/ filename[k] = ' ';break;
} // end of while order[0]=' ';strcat(order,path);if(strlen(path)>0)strcat(order,”“);strcat(order,filename);printf(”filename=%s,“,order);char *p_filename=order;FILE *fpse;
if((fpse=fopen(order,”w“))== NULL){
} else { printf(”The file %s found,ready to transfer.n“,filename);while(1){
//读取流并显示 int ret;printf(”open errer“);return 1;
}
}
} ret = recv(newsocket, rbuffer, 80, 0);if(ret == 0)// Graceful close
return 0;
else if(ret == SOCKET_ERROR){
}
printf(”recv()failed: %dn“, WSAGetLastError());return 0;
if(strncmp(rbuffer,”226 Transfer“,strlen(”226 Transfer“))==0){
}
break;
fprintf(fpse,”%s“,rbuffer);
printf(”RBUFFER=%s“,rbuffer);fclose(fpse);
sy_error=0;
return 0;
int spwdfun(SOCKET newsocket){
char temp_buffer[160];
while(fgets(temp_buffer,80,fin)!=NULL){
temp_buffer[strlen(temp_buffer)-1]=' ';printf(”temp_buffer=%s“,temp_buffer);///////////////////////////////目录判定 if(path[0]!=' ')sprintf(sbuffer,”%s%s“,temp_buffer,path);else
printf(”Equivalent to pwd n“);//order[0]=' ';//strcat(order,”dir “);//strcat(order,path);//strcat(order,);system(”cd >tmp.txt“);FILE *fin;
fin=fopen(”tmp.txt“,”r+“);
sprintf(sbuffer, ”125 Transfering...rn“);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);
}
sprintf(sbuffer,”%s“,temp_buffer);
/////////////////////////////// if(port_connect==0)
//send(ns_data, sbuffer, strlen(sbuffer), 0);send(newsocket, sbuffer, strlen(sbuffer), 0);
}
fclose(fin);
sprintf(sbuffer, ”226 Transfer completed...rn“);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);system(”del tmp.txt“);
//CLOSE the ns_data SOCKET or data port SOCKET if(port_connect==0){
}
sy_error=0;closesocket(ns_data);
sprintf(sbuffer,”226 Close the data socket...rn“);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);ns_data = socket(AF_INET, SOCK_STREAM, 0);
return 0;
int scdfun(SOCKET newsocket){
int i=3,k=0;char name[20],name2[20];int j,count=0;//path overfollow int pathlen;
printf(”Equivalent to cd n“);while(1){
//RECEIVE
bytes = recv(newsocket, &rbuffer[i], 1, 0);printf(”rbuffer[i]=%cn“,rbuffer[i]);printf(”bytes=%dn“,bytes);if((bytes < 0)||(bytes == 0))break;name[k]=rbuffer[i];
}
name2[k]=rbuffer[i];if(rbuffer[i] == ' '){
}
if(rbuffer[i]!= 'r'){
} i++;k++;
name[k] = ' ';name2[k] = ' ';break;
}//end while if(path[0]!=' ')strcat(path,”“);strcat(path,name);
if(strncmp(name2,”..“,2)==0)
{
}
pathlen=strlen(path);for(j=pathlen-1;j>=0;j--){
}
printf(”%d=n“,j);path[j+1]=' ';
if(path[j]==''){
}
if(count==2){
}
//path[j]=' ';break;
path[j]=' ';count++;
printf(”path=%s“,path);
sy_error=0;
return 0;int smdfun(SOCKET newsocket){
//CLOSE the ns_data SOCKET or data port SOCKET if(port_connect==0){
}
sy_error=0;//closesocket(ns_data);
sprintf(sbuffer,”226 Close the data socket...rn“);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);//ns_data = socket(AF_INET, SOCK_STREAM, 0);char name[20];int i=3,k=0;
printf(”Equivalent to md n“);while(1)// while loop 3 {
//RECEIVE
bytes = recv(newsocket, &rbuffer[i], 1, 0);printf(”rbuffer[i]=%cn“,rbuffer[i]);printf(”bytes=%dn“,bytes);if((bytes < 0)||(bytes == 0))break;name[k]=rbuffer[i];if(rbuffer[i] == ' ')
}
order[0]=' ';strcat(order,”md “);strcat(order,path);if(strlen(path)>0)strcat(order,”“);strcat(order,name);system(order);{
}
if(rbuffer[i]!= 'r'){
} i++;
k++;/*ignore CR's*/ /*end on LF*/ name[k] = ' ';break;
}
return 0;
int sdelfun(SOCKET newsocket){
}
if(rbuffer[i]!= 'r'){
} i++;k++;break;
printf(”Equivalent to del n“);while(1){
//RECEIVE int i=3,k=0;char name[20];
bytes = recv(newsocket, &rbuffer[i], 1, 0);printf(”rbuffer[i]=%cn“,rbuffer[i]);printf(”bytes=%dn“,bytes);if((bytes < 0)||(bytes == 0))break;name[k]=rbuffer[i];
if(rbuffer[i] == ' '){
name[k] = ' ';
}//end while order[0]=' ';strcat(order,”rd “);
strcat(order,path);if(path[0]!=' ')strcat(path,”“);strcat(order,name);system(order);sprintf(sbuffer,”del ok...rn“);
}
void HandleError(char *func){
char info[65]= {0};
_snprintf(info, 64, ”%s: %dn“, func, WSAGetLastError());printf(info);}
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);if(bytes == SOCKET_ERROR)
{
}
HandleError(”recv()");sy_error=1;return 1;
sy_error=0;
return 0;