当前位置: 主页 > JAVA语言

java实现tcp协议-c 实现自定义tcp协议

发布时间:2023-03-25 16:11   浏览次数:次   作者:佚名

WuhanInstituteEducationaScienceVOL.2006武汉市教育科学研究院学报67Java实现基于TCP/IP协议的网络通信程序随着互联网的飞速发展,程序开发已经由早期开发单机程序过渡到网络互联的程序开发。Java语言提供了一套功能强大的API(应用编程接口)来实现网络编程所需的网络通信功能。这套API使Java程序员不用考虑复杂的网络协议以及底层的数据传输方式,而直接用面向对象的思想来实现网络传输。[关键词JAVA;网络;SOCKET;CLIENT/SERVER[作者简介]刘嵩:武汉软件职业学院教师。(武汉430205)随着互联网的普及,程序开发过程中不可避免的要求实现网络互连通信功能。网络上的系统结构多为客户端/服务器模式,服务器端负责数据和图像等的存储、维护、管理以及传递java实现tcp协议,客户端则负责人机界面的操作、送出需求及显示收回的数据。下面介绍一下如何使用Java来进行网络编程:一、基本原理socket是指在一个特定编程模型下进程间通信链路的端点。一个socket包括两个流:一个输入流和一个输出流。如果一个进程要通过网络向另一个进程发送数据,只需简单地写入与socket相关联的输出流。

c 实现自定义tcp协议_java实现tcp协议_tcp ip协议实现代码

一个进程通过从与socket相关联的输入流读来读取另一个进程所写的数据。如果要建立连接,一台机器必须运行一个进程来等待连接,而另一台机器必须试图到达第一台机器。这和电话系统类似;一方必须发起呼叫,而另一方在此时必须等待电话呼叫。socket通信机制提供了两种通讯方式:有联接和无联接方式java实现tcp协议,分别面向不同的应用需求。使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程。使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行。TCP/IP系统中的端口号是一个16位的数字,它的范围是0~65535。实际上,小于1024的端口号保留给预定义的服务,而且除非要和那些服务之一进行通信(例如telnet,SMTP邮件和ftp等),否则你不应该使用它们。客户和服务器必须事先约定所使用的端口。如果系统两部分所使用的端口不一致,那就不能进行通信。

java实现tcp协议_tcp ip协议实现代码_c 实现自定义tcp协议

二、实现方法Java中输入/输出流概念:过滤流DataInput2Stream和DataOutputStream除了分别作为FilterIn2putStream和FilterOutputStream的子类外,还分别实现了接口DataInputDataOutput。接口Da2taInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBooleanreadFully()等。接口DataOutput中定义的方法主VOL.WuhanInstituteEducationaScience68武汉市教育科学研究院学报要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeCharDa2taInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream可以向所连接的输出流写入基本类型的数据。多线程使应用程序可以同时进行不同的操作处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。

tcp ip协议实现代码_c 实现自定义tcp协议_java实现tcp协议

Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。三、具体实现Application同Applet的通信,两端通过Sock2et机制进行连接,通信过程如图1所示:(一)客户端的编程流程打开Socket,新建一个套接字,为套接字建立一个输入和输出流;根据服务器协议从套接字读出或向套接字写入,清除套接字和输入/输出流。下面的代码创建了一个服务程序主机地址为198.163.227.6,端口号为4331的Socket对象,然后从这个新创建的Socket对象中获取输入输出流进行数据传输,然后再关闭流和Socket对象。SocketnewSocket(“198.163.227.OutputStreamos/省略从输入流读取数据代码os.close(二)服务器端的编程流程打开ServerSocket创建一个服务器型套接字和一个普通套接字,服务器型套接字在指定端为客户端请求的Socket服务;使用ServerSocket类的accept)方法使服务器型套接字处于监听状态并把监听结果返回给普通套接字;为该普通套接字创建输入和输出流;从输入和输出流中读入或写入字节流,进行相应的处理,并将结果返回给客户端;在客户端和服务器工作结束后关闭所有的对象,如服务器型的套接字,普通套接字,输入和输出流。

c 实现自定义tcp协议_java实现tcp协议_tcp ip协议实现代码

正是由于Java系统具有基于Socket的灵活通信机制,因而其应用程序能自由地打开和访问网络上的对象,就象在本地文件系统中一样。下面的代码在4331端口创建了一个Server2Socket对象负责处理客户端的套接字请求,为每一个用户请求套接字启动一个新的线程,并且通过处理请求得到的套接字对象获取输入输出流进行数据传输。try{servernewServerSocket(4331)IOExceptione1){System.out.println(“正在监听Ser2verSocket对象不能重复创建try{youserver.accept/等待用户连接}catchnewServer_threadyou).start/为每个客户启动一个专门的线程}classServer_threadextendsThread{Socketsocket;ConnectionConnull;StatementStmtnull;DataOutputStreamoutWuhanInstituteEducationaScienceVOL.2006武汉市教育科学研究院学报71这样得到了vptr这个指针,然后用一个unsignedchar指针运算偏移量,得到的结果再次输入getp那么它到底能不能正确工作呢?我们修改main来测试一下:intmain通过上述方法,我们获取了对象的VPTR,在它的体外执行了它的虚函数,也对VPTR在多态中的应用有了深刻的认识.相信读者以后遇到运行时的多态感觉会好多了吧。

java实现tcp协议_c 实现自定义tcp协议_tcp ip协议实现代码

〔责任编辑:陈光兰〕 (上接第 68页) Data InputStream newData InputStream socket.getInput2 Stream newDataOutputStream socket.getOutput2 Stream Java语言为我们提供了强大的网络开发 API,使我们能够通过简单的面向对象的编程思想 来通过 TCP/ IP协议进行复杂的网络通信。但是 在实际运用中还需要注意以下问题: (一)在建立 Socket连接时,两端的端口号必 须设为一致,否则建立不了连接。服务器端必须 有主机 IP地址或主机名参数。 (二)连接建立好之后应确定输入和输出流。 起初程序中用的是 Data InputStream Print2Stream,结果只能传输英文, 传输中文时产生乱 PrintStream改为DataOutputStream,使用 re2 adUTF( )方法后,中文传输问题得到解决。 (三)如果一个使用某端口的程序没有关闭, 另一个程序就不能使用这个端口。 参考文献: ]BruceEckel. Java编程思想[M]. 机械工业出版社 Horstmann,Gary Cornell. Java 2核心技术 机械工业出版社〔责任编辑:陈光兰〕