欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Linux环境下基于TCP的Socket编程浅析 (1).pdf

    • 资源ID:70020818       资源大小:170.50KB        全文页数:4页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux环境下基于TCP的Socket编程浅析 (1).pdf

    Linux 环境下基于 TCP 的 Socket 编程浅析吴佩贤(绍兴文理学院 计算机系浙江 绍兴312000)摘要:Socket适用于同一台计算机上的进程间通信,同时也适用于网络环境中的进程间通信。他已成为当前许多操作系统的网络API,也是网络操作系统中必不可少的基础功能。因特网为网络中的应用提供了 2 种类型的服务:由T CP协议提供的面向连接服务和由U DP 协议提供的无连接服务。随着 Linux 操作系统的不断推广,Linux 环境下的 Socket 开发和研究一直是人们关注的热点。文章介绍了 Linux 平台下的 Socket 及其在 TCP 协议下的编程原理,并通过一个用 Java 编写的基于T CP的客户/服务器程序,描述了网络中不同主机上的两个进程之间的Socket通信机制。关键词:Socket;T CP/IP;客户机/服务器;进程;Java中图分类号:TP316文献标识码:B文章编号:1004373X(2005)1605303Analysis of Socket Programming TCPbased on LinuxWU Peixian(Computer Science Department,Shaoxing University,Shaoxing,312000,China)Abstract:Socket is suitable for communication between two processes not only from one computer but also from network.NowSocket is an available networkAPI of many OS,at the same time,it is one necessary part of networkOS.Internet providesconnection-oriented service(T CPbased)and connectionless service(U DPbased).Socket development and studying on Linux arealways concerned while Linux is innovated on and on.T he paper introduces the Socket and it s programming principle based on T CP inLinux environment.By using a T CPbased client/server program which is edited in Java,it describes Socket communicationmechanism between the two processes from the different computers in the network.Keywords:Socket;T CP/IP;client/server;process;Java收稿日期:20050405Linux是一个诞生于Internet和WWW的产品,他和网络密切相关。Linux网络系统具有稳定、简易、高效、兼容性好等特点,并且支持多种网络协议,如 IP v4,IP v6,X.25,IPX,NET BIOS,DDP 等。套接字(Socket)是介于网络应用层和传输层之间的编程接口,套接字接口提供了访问下层通信协议的大量系统调用和相应的数据结构。在 Linux 中,套接字接口是应用程序访问下层的网络协议的惟一方法。具体讲,套接字在用户级实现了两个应用程序之间的网络连接和数据交换,所以 Linux 中的套接字意味着网络上的连接。套接字在 TCP/IP 网络模型中的地位如图 1 所示。图 1套接字1BSD 套接字接口Socket 接口是为方便开发人员进行 T CP/IP 程序开发,而为 TCP/IP 协议所制定的一组应用程序接口。由于他最早应用于伯克莱大学的BSD Unix中,所以习惯上又称其为BSD Socket(简称BSD)。一个套接字描述为一个通信连接的一端,在一个通信连接中的两端通信程序应各自有一个套接字来描述他们自己那一端,不同主机中的两个进程通过各自的套接字发送和接收消息,从而实现进程间跨网络的通信。Linux 的套接字支持多种网络协议,不同类型网络协议的工作方式不同,所使用的地址格式也完全不同。对于各种网络协议而言,使用相同地址格式的几个协议称为一个协议地址簇,表 1 列出了 BSD 套接字的常见地址簇。表 1BSD 套接字地址簇的主要类型地址簇类型对应的通信协议AF_INETT CP/IP 协议AF_IPXNovell IPX 协议AF_UNIXUnix 内部套接字AF_AX25AX.25 协议套接字AF_APPLETALKAPPLET ALK DDS(Macintosh机器用)Linux将套接字地址簇抽象为统一的BSD套接字接53 现代电子技术2005 年第 16 期总第 207 期嵌入式与单片机口,该接口是应用程序的开发接口,由各地址簇专有的软件支持。Linux BSD Socket 支持以下常见套接字类型:(1)SOCK_STREAM(数据流套接口):提供一个面向连接的双工顺序数据流传输和可靠的数据传输服务。这种套接字可以保证数据传输的可靠性,不会出现数据丢失、破损或重复出现等差错,而且通过流量控制避免发送的数据流超限。Internet地址中的TCP协议支持流套接字。(2)SOCK_DGRAM(数据报套接口):提供一个无连接和不可靠的双工数据传输服务。数据包以独立包形式被发送和接收。不对数据的传输提供无错保证,即数据可能被丢失、破坏,也可能被重复接收。Internet 地址中的UDP协议支持这种套接字。(3)SOCK_RAW(原始套接口):这种类型的套接字允许对低层协议如 IP 或 ICMP 直接访问,可以直接填充IP,TCP,UDP 或者 ICMP 的包头,发送用户自己定义的IP包或者ICMP包。主要用于一些协议的开发,在网络安全的抓包中有重要的应用。2Linux 平台下的 Socket 编程原理在 Linux 中,Socket 属于文件系统的一部分,网络通信可以被看作是对文件的读取。这使得用户对网络的控制极为方便,Linux的许多特性都非常有助于网络编程:首先,Linux 拥有 POSIX 标准库函数,Socket(),bind(),listen(),send(),accept()这几个库函数可以方便地实现客户机/服务器模型中数据的传送与接收。其次,Linux 的进程管理策略也非常适合服务器的工作环境,Linux 中的每个进程都对应一个父进程,同时他也能创建多个子进程。在服务器端可以用父进程去侦听客户机的连接请求,当有客户机的连接请求发生时,父进程创建一个子进程去建立连接线路并与该客户机通信,而他本身可继续侦听其他客户机的连接请求,这样就可避免当有一个客户机与服务器建立连接后服务器就不能再与其他客户机通信的问题。最后,Linux 传承了 Unix 设备无关性这一优秀特性,即通过文件描述符实现了统一的设备接口:磁盘、显示终端、音频设备、打印设备甚至网络通信都使用统一的I/O调用。这 3 个特性大大方便和简化了 Linux 环境下的网络程序设计。(1)Socket 函数Socket()用来创建套接口描述符,其格式声明为:int Socket(int domain,int type,int protocol)参数 domain 说明网络程序所在的主机采用的通信协议,如 AF_INET(IP v4 协议),AF_INET6(IP v6 协议),AF_LOCAL(Unix域协议);参数type指定套接口类型(数据流套接口、数据报套接口、原始套接口),即相当于指明 了网络程 序所采 用的通 信协议(TCP 还是UDP);参数protocol由于指定了type,一般取 0 即可。(2)bind函数bind()用来将套接口绑定到本地计算机的某一端口,其格式声明为:int bind(int sockfd,struct sockaddr*my_addr,intaddrlen)sockfd为套接口描述字;指针my_addr指向sockaddr结构,该结构包含了远程服务程序的IP地址与端口号;addrlen 指明 sockaddr 结构的长度。(3)listen 与 accept 函数服务器端通过 listen()等待一个进入的连接请求,接收到的请求存于队列中。当有多个客户端和服务器相连时,通过参数backlog指定队列的最大长度。accept()则从已接收的连接请求队列中取出请求并分析这个请求,若队列为空,则使服务器端程序阻塞。本文主要阐述的是面向连接的数据流通信的 Socket编程过程。客户机/服务器主要编写客户程序和服务器程序,以下是主要的编程框架。面向连接的数据流通信中,服务器端程序基本的编写步骤如图 2 所示。首先,在服务器端使用Socket()建立一个通信端口,再用 bind()命令把一个地址绑定到这个端口上。然后,服务器端使用 listen()侦听连接请求,当远程的客户机试图通过 connect()连接 listen()正在侦听的端口时,连接将会在队列中等待,直到使用accept()处理他。在accept()处理了连接请求后,将会生成一个新的描述这个连接端口的套接字,利用这个套接字就可以发送和接收数据了。如果 listen()一直没有侦听到连接请求,那么服务器任务就会在 accept()处阻塞(在阻塞模式下),一直到有连接请求到来。不论何种编程语言,和 Socket 打交道都是这一 组调用,只是在格式上有所区别。Visual Basic采用WinSock控 件,C+Builder采 用TclientSocket元 件 和TserverSocket 元 件,Visual C+采 用 MFC 类 中 的CAsyncSocket 类 和 CSocket 类,Java 中 通过 J.Socket 和 J.ServerSocket 类库来实现网络之间的通讯。图 2TCP客户机/服务器程序的工作流程54计算机应用吴佩贤:Linux 环境下基于 T CP 的 Socket 编程浅析对于客户机任务,他也需要先用Socket()建立一个通信端口,但是不必用bind()把一个本地地址绑定到这个端口上,而是直接使用connect()向指定的服务器发送连接请求。函数connect()调用成功后,套接口描述字就与远程服务程序建立好了连接,建立连接后通过send()和recv()实现数据的发送与接收。send()返回实际发送的字节数,如果返回的字节数比要发送的字节数少,则在以后必须发送剩下的数据。套接口读写完毕后,可通过close()调用关闭连接的套接口文件描述符。3用 Java 编写的客户/服务器应用程序示例网络应用程序的核心由一对程序组成一个客户程序和一个服务器程序。当这 2 个程序执行的时候,系统就会创建一个客户端进程和一个服务器端进程,并且这 2个进程通过对 Socket 的读写来互相通信。下面就客户/服务器模型来对 TCP 的 Socket 编程进行示范,程序功能如下:客户端从其键盘读入一行并将该行发送到通往服务器的套接字上;服务器从其连接套接字读入一行并将该行转换成大写;服务器将改写后的这一行输出到通往客户端的连接套接字上;客户端从他的套接字中读出修改后的行,并将该行在显示器上打印输出。(1)应用程序的客户端代码如下:import java.io.*;import .*;class TCPClient public static void main(String argv)throws ExceptionString sentence;/sentence 是用户在键盘打出并发送给服务器的字符串String modifiedSentence;BufferedReader inFromU ser=new BufferedReader(new InputStreamReader(System.in);/创建 BufferedReader 类型的流对象 inFromU serSocket clientSocket=new Socket(hostname,1234);/创建 Socket 类型的对象 clientSocket,还对客户和服务器间的 T CP 连接进行初始化。字符串“hostname”必须用服务器的主机名,1234 是假设的端口号。DataOutputStream outToserver=newDataOutputStream(clientSocket.getOutputStream();BufferedReader inFromServer=new BufferedReader(new InputStreamReader(clientSocket.getInputStream();/创建了两个连接在套接字上的流对象:outToServer 流为进程提供了到套接字的输出;inFromServer流为进程提供了从套接字的输入sentence=inFromUser.readLine();outT oServer.writeBytes(sentence+n);/将字符串 sentence 加上一个回车,传送到 outToServer流中modifiedSentence=inFromServer.readLine();/从服务器接收字符,经过流inFromServer放入字符串modifiedSentence 中System.out.println(String From Server:+modifiedSentence);ClientSocket.close();/关闭客户与服务器间的T CP连接java.io 和 是 Java 的包,java.io 包包含了输入和输出流 的类, 包提 供了网络 支持类。流inFromUser 是该程序的一个输入流,当用户在键盘上打出 字 符 的 时 候,字 符 就 进 入 了 inFromUser 流 中。InFromServer流是程序的另一个输入流,他被加入到套接字 clientSocket 上。从 网 络 中 到 来 的 字 符 进 入 流InFromServer 中。最后,流 outToServer 是该程序的输出流,他也被加入在套接字上。客户端发送到网络中的字符流入 outToServer 流中。(2)应用程序的服务器端代码如下:import java.io.*;import .*;class T CPServer public start void main(String argv)throws ExceptionString clientSentence;String resultSentence;/希望得到的结果字符串 ServerSocketwelcomeSocket=newServerSocket(1234);/创建对象welcomeSocket,他是等待客户端到来的敲击的门。端口号 1234 对服务器进程进行标识while(true)Socket connectionSocket=welcomeSocket.accept();/当有客户敲击welcomeSocket时,该行创建一个新的套接字 connectionSocket,然 后 T CP 建 立 了 一 个 在 客 户clientSocket 和服务器connectionSocket 间的连接,客户端和服务器端就可以通过该连接相互传送字节了。需要说明的是,connectionSocket建立后,服务器应该可以为使用welcomeSocket的应用程序继续侦听来自其他客户端的请求,为简化阐述,本程序并未侦听更多的连接请求。BufferedReader inFromClient=new BufferedReader(newInputStreamReader(ConnectionSocket.getInputStream();DataOutputStream outToClient=new DataOutputStream(connectionSocket.getOutputStream();clientSentence=inFromClient.readLine();resultSentence=clientSentence.toUpperCase()+n;outToClient.writeBytes(resultSentence);/输出结果,并等待下一输出一旦两个程序在各自的主机上被编译了,服务器程序就首先在服务器上执行,他在服务器上创建了一个进程。如前所述,服务器进程等待着一个客户进程与他进行联系。当客户程序执行时,客户端创建一个进程,并且这个进程与服务器进行联系并建立一个到服务器的TCP连接。然后客户端的用户可以使用该应用程序来发送一行并接收该行的转换成大写之后的字符串。4结语Java是平台无关的,且编写的程序简洁,因而用Java(下转第 59 页)55 现代电子技术2005 年第 16 期总第 207 期嵌入式与单片机核。在 此 过 程 中,FPGA Architect-Xilinx XC4000/Spartan功能将对设 计进行校验,检验参数 是否符合Xilinx DSP LogicCORE 的要求。符合要求后,将设计转换到 Xilinx 的设计环境中,其中包括 VHDL 的行为级仿真模型和网表文件(NetList)。多电平判决模块的判决门限应该能区分 4 个电平,所以可以采用数值为 1,2 和 3 的 3 个门限,将 04 的区间等分,从而可以将信号量化为 0,1,2,3 四个电平。5结语软件无线电的提出和发展,标志着无线通信从硬件到软件的质的飞跃,是未来无线电通信的发展方向。近年来FPGA 技术迅速发展,他既具有 ASIC 的高速处理能力,又拥有很好的可重构性能,而且开发成本低、开发周期短,使其成为实现软件无线电的数字信号处理的一种非常有效的选择。本文对其中较为关键的 16QAM 调制解调系统提出了 FPGA 的实现方法,其他调制解调方式也可类似得到。参考文献 1徐以涛,沈良,王金龙.FPGA 技术在软件无线电中的应用 J.电信科学,2001,11(17).2曾艺城.可编程逻辑技术及其在软件无线电中的应用-数字调制解调系统的FPGA实现 D.北京:北京航空航天大学,2001.3汪东艳.软件无线电技术与可重配置计算体系结构 J.今日电子,2002,(7):1213.作者简介苏小妹2002级电路与系统专业硕士研究生。主要研究方向为软件无线电在第三代移动通信系统中的应用。黎福海硕士生导师,副教授,湖南大学电气与信息工程学院副院长。主要研究方向为现代网络与通信技术、电子系统与智能化系统设计、集成电路设计与测试技术。汪浩2002级电路与系统专业硕士研究生。(上接第 52 页)据方案的核心对象。Dataset 是数据的内存驻留表示形式,无论数据源是什么,他都会提供一致的关系编程模型。他可以用于多个不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。Dataset表示包括相关表、约束和表间关系在内的整个数据集。Dataset 中的方法和对象与关系数据库模型中的方法和对象一致。Dataset 也可以按 XML 的形式来保持和重新加载其内容,并按XML架构定义语言(XSD)架构的形式来保持和重新加载其架构。4结语ADO.NET是当前数据库技术处理的标准,集合了所有用于数据处理的类和程序化接口。这些类和接口代表了数据容器对象,他们以典型的数据库功能为特色。同时ADO.NET 是.NET 数据库应用程序的最终解决方案。他以整体设计为特色,是一个新的数据访问编程模型,能够帮助程序员以更加有效的方式构建高效数据库应用程序。参考文献 1杨志娟,李朋朋,马云艳,等.用Visual Basic.NET和Visaul C#开发 XM L Web 服务与服务组件 M .北京:清华大学出版社,2002.2孙三才,许薰尹.程序设计 C#&ASP.NET M.北京:中国青年出版社,2001.3康际科技.ASP.NET 行家设计实务 M.北京:中国铁道出版社,2001.4石磊.VB.NET与数据库开发 M.北京:人民邮电出版社,2001.5FredBorell.VB.NET 高级编程 M .康博译.北京:清华大学出版社,2001.6Douglas Reilly J.ASP.NET Web应用程序开发新思 维M.北京:清华大学出版社,2002.作者简介孔延香女,1974年出生,西北民族大学计算机科学与信息工程学院 2003 级计算机应用技术硕士。研究方向为计算机网络数据库应用。(上接第 55 页)进行客户/服务器编程越来越流行。以上介绍了Socket的编程机制及在Linux系统下的一个套接口程序,能够发现用 Socket 描述网络程序比较直观,且框架清晰、明确。参考文献 1毛德操,胡希明.Linux内核源代码情景分析(下)M.杭州:浙江大学出版社.2001.2张威.Linux网络编程教程 M.北京:北京希望电子出版社,2002.3Douglas Comer,David L Stevens.TCP/IP 网络互联技术(卷 3):客户-服务器编程与应用 M.北京:清华大学出版社,2004.作者简介吴佩贤男,1974年出生,浙江诸暨人。主要从事实时操作系统及神经网络研究。59 现代电子技术2005 年第 16 期总第 207 期嵌入式与单片机

    注意事项

    本文(Linux环境下基于TCP的Socket编程浅析 (1).pdf)为本站会员(qwe****56)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开