`

如何使用java语言中socket关键字通信

阅读更多
[color=blue][/color]    学习java网络通信已经有一段时间了,做了一些项目,诸如仿腾讯qq的pc机与pc之间的聊天程序、远程控制、网络画板等等一些小项目。对java中的Socket通信技术已经有了一定的理解。 ---亲爱的
    众所周知,在Internet 被广泛使用的今天, 网络编程就显得更加重要了, 网络应用是Java 语言取得成功的领域之一,Java 已经成为Internet 上最为流行的一种编程语言。Java 语言的网络功能非常强大, 其网络类库不仅使我们可以开发访问Internet 应用层程序,而且还可以实现网络底层的通信。在TCP/IP 网络中,不同的机器之间通信时,数据的传输是由传输层控制的, 这包括数据要发往的目标机器及应用程序‰ 数据的质量控制等。TCP/ IP 网络中最常用的传输协议TCP 和UDP , 用户数据报就属于这一层。传输层通常以TCP 和UDP 协议来控制端点到端点的通信。用于通信的端点是由Socket来定义的, 而Socket 是由IP 地址和端口号组成。常用的Socket 类型有两种: 流式Socket 和数据报式Socket 。流式是一种面向连接的Socket , 针对于面向连接的TCP 服务应用; 数据报式Socket 是一种无连的Socket ,对应于无连接的UDP 服务应用。本文介绍一种将Java 中的Socket 的类ServerSocket类分别用于客户端和服务器端, 在任意两台机器间建立流式连接, 实现点到点的通信的Java 程序实现方法。
    一: Socket 通信基于Java 的实现Scoket 是网络上运行的两个程序间双向通信的一端,它既可以接受请求, 也可以发送请求, 利用它可以较为方便地进行网络上的数据传递。在
Java 中,可以将Sockek 类和ServerSocket 类分别用于客户端和服务器,在任意两台机器间建立连接。Socket 类用在客户端, 用于通过构造一个Socket 类来建立与服务器的连接。ServerSocket 类用于服务器端,用于接收客户端传送的数据。Java语言实现Socket 通信, 一般需要按以下三个步骤进行。
    (1)建立服务器类在两台机器之间建立连接, 其中必须要把一台机器作为服务器, 在服务器端用Java 中的服务器类ServerSocket ,并使用端口号作为参数来创建服务器对象。例如: ServerSocket server = new Server2Socket ( 3000) ;server 是服务器对象, 它使用3000 号端口, 当一个客户端程序建立一个Socket 连接且所连接端口号为3000 时, 服务器对象server 便响应这个连接。接下来用Server . accept ( ) 方法创建一个Socket对象,服务器端可以利用这个Socket 对象与客户端进行通信。接着定义输入流in 及输出流out 对象,并进行封装,随后,就可以使用输入流in . read2Line ( ) 方法得到客户端的输入,也可以使用输出流out . println ( ) 方法向客户端发送数据了。最后,在所有通信结束以后, 应关闭这两个数据流,关闭的顺序是先关闭输出流, 再关闭输入流。
    (2)建立客户端代码与服务器端相比, 客户端要简单一些。客户端需用到服务器所在机器的IP 地址以及服务器的端口作为参数来创建一个Socket 对象, 得到这个对象后,就可以用该对象相应的方法实现数据的输入和输出了。例如:Socket socket= new Socket ( ”192 . 168 . 0 . 5”,3000) ;该程序代码建立了一个socket 对象,这个对象连接到IP 地址为192 . 168 . 0 . 5 的主机, 端口号为3000 的服务器对象。
     同服务器端一样, 接着要建立输入流和输出流,分别对应服务器的输出和客户端的写入。
    (3)建立用户界面用户界面可以根据自已的喜好及通信要求建立。下面就以两台机器为例,具体说明实现
    Socket 通信的关键程序代码:
   步骤a: 服务器端由SimpleServer 和SimpleServer2Worker 类组成, SimpleServer 是实现该通信主类,在该类中要完成Socket 对象的定义, 并建立一个循环来检测是否有客户机连接到服务器上, 如果有, 则创建一个线程为这个客户机服务。SimpleServerWorker 则是一个处理线程的类, 它实现线程的Runnable 接口, 主要由该线程完成信息及
数据处理的显示等功能。具体代码如下:
import java . io . 3 ;
import java . net . 3 ; / / 引入数据包/ /
public class SimpleServer/ / 定义类/ /
{private static / / 定义通信端口号为3000/ /
final int PORT-NUMBER = 3000 ;
public static void main ( String[ ] args)
{    ServerSocket server = null ; / / 定义对象,并初始化/ /
     Socket theSocket = null ;
     DataInputStream theReader = null ;
     PrintStream theWriter = null ;
try { server = new ServerSocket ( PORT-NUMBER) ;
/ / 实例化对象/ /
     SimpleServerWorker worker ; / / 定义类对象/ /
     Thread thread ; / / 定义一个线程对象/ /
     while ( true) / / 循环检测是否有客户机连接到服务器上/ /
     {   theSocket = server . accept ( ) ;/ / 调server 对象的accept ( ) 方法对通信端口监测
      worker = new SimpleServerWorker ( theSocket ) ;/ / 实例化worker 对象/ /
     thread = new Thread (worker ) ; / / 线程实例化/ /
     thread . start ( ) ; / / 启动线程/ /
      } }catch ( Exception e ) { . . . } / / 异常处理/ /
      } / / SimpleServer 类完成/ /
     SimpleServerWorker 类的程序代码与Java 处理一般线程程序的编写方法相同,在这就不在敷述。
    步骤b: 客户端由SimpleClient 类组成
public class SimpleClient / / 定义类/ /
{ . . .
public static void main ( String[ ] args)
{ . . . / / 在此定义对象并初始化/ /
try
{   / / 把服务器的IP 地址和通信端口号
    theSocket = new Socket ( theAddress , PORT-NUMBER) ;作参数实例化Socket 对象/ /
    theReader = new BufferedReader ( new InputStreamReader (theSocket . getInputStream( ) ) ) ; / / 定义并实例化一个输入流对象/ /
    theWriter = new PrintWriter ( newOutputStreamWriter ( theSocket . getOutputStream( ) ) ) ; / / 定义并实例化一个输出流对象/ /
    while ( true) / / 循环将数据发送给服器端/ /
    { . . theWriter . println (mesg) ;
      theWriter . flush ( ); / / 清空输出流, 并将缓冲区中的数据强制送出/ / . . .
}
   二:小结
    Java 语言中的Socket 类的功能非常强大。虽然传统编程语言如VB 、C + + 等也可以实现Socket通信,但其实现方法的难度很大。一般编程人员都望而生畏。编程难度主要体现在通信机器之间如何实现的同步及多任务处理方面。Java 拥有自已的语言优势( 1) Java 语言对线程的内置和本地的支持,它支持多线程。这样在一台服器与多客户机进行通信就可以建立并启动多个线程来为客户机服务。而编程人员不需要考虑CPU 对线程之间的调度( 2) Java 提供管理数据流的类,用户在传送和接收数据时,只需定义一个相应对象,用对象相应方法接受和发送数据就可。很好的解决了传统编程中技术难点。虽然现在微软也推出了VB.
NET、VC + + . NET 等语言用以加强网络编程功能。用这些新软件实现Socket 通信编程方法与Ja2va 语言实现的方法大体相同。即使在这样状态下,Java 同样拥有自己最大的语言优势即平台工作。这样建立通信时不须考虑所要通信机器之间所安装的操作系统是否一致。
综上所述,不仅介绍了Java 中实现端口侦听、网络连接、数据发送、数据的接受的具体方法, 还运用了Java 实现网络功能时所必然要涉及到的如多线程技术和利用控制码控制程序运行状态等的实现方法。了解并掌握这些对我们编写功能更强、结构更复杂的网络应用程序非常有帮助。
0
0
分享到:
评论

相关推荐

    TCP/IP java 编程

    TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础。...JAVA语言已经成为现今网络应用中最广泛的语言,本文就是介绍JAVA中的Socket套接字以及通信的实现。 关键字:JAVA SOCKET,TCP/IP,套接字,网络编程

    JAVA语言程序设计【高清版】.pdf

    180 第9章 Java Applet 182 9.1 编写Applet 182 9.1.1 小程序示例 182 9.1.2 小程序设计过程 183 9.2 小程序中使用的方法 183 9.2.1 基本方法 184 9.2.2 用于显示Applet的方法 184 9.3 HTML文档 185...

    java实现socket通讯互发

    用java实现socket通信,客户端和服务端互发消息,通过关键字推出链接

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    8.1.2 在Eclipse中使用包 194 8.1.3 天上掉下个package 197 8.1.4 包带来了什么? 197 8.2 import语句:化繁为简 200 8.2.1 import语句 200 8.2.2 一网打尽包中所有类 201 8.2.3 import语句带来的小问题 202 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    8.1.2 在Eclipse中使用包 194 8.1.3 天上掉下个package 197 8.1.4 包带来了什么? 197 8.2 import语句:化繁为简 200 8.2.1 import语句 200 8.2.2 一网打尽包中所有类 201 8.2.3 import语句带来的小问题 202 ...

    JAVA基础课程讲义

    基于TCP协议的SOCKET编程和通信 193 UDP通讯的实现 201 思考作业 203 上机作业(分组完成,3人一组,周末完成) 204 第十一章 JAVA多媒体编程 205 字体 205 字体示例和效果 205 颜色 206 颜色编程示例 206 图形绘制 ...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    JAVA面试题最全集

    使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,Unicode 61.描述反射机制的作用 62.如何读写一个文件? 63.在图形界面中,一个按钮如何处理鼠标点击事件? 64.在图形界面中,一个...

    java程序设计实验指导代码

    15.4 实验3 基于TCP/IP的Socket通信 第16章 多媒体技术 16.1 预备知识 16.2 实验1 文字滚动条 16.3 实验2 幻灯片的定制和显示 16.4 实验3 水中倒影 16.5 实验4 音乐日历 16.6 实验5 媒体播放器 第17章 数据库...

    基于javatcpsocket通信的拆包和装包源码-java-:Java-

    socket通信的拆包和装包源码 java总结 五片内存:寄存器,本地方法区,方法去,堆,栈 堆:数组,对象,也就是封装好的实体 栈:局部变量,堆得变量都有默认初始化 构造代码块:所有的对象进行初始化,所有的对象都会...

    基于javatcpsocket通信的拆包和装包源码-InterviewQuestions:面试问题

    基于java ...它经常使用英语关键字,而其他语言使用标点符号,并且它的句法结构比其他语言少。 Python 是一种高级通用编程语言,可以应用于许多不同类别的问题。 该语言带有一个大型标准库,涵盖了诸如正

    java编程基础,应用与实例

    第1章 什么是Java程序设计语言 1 1.1 Java语言诞生背景 1 1.2 Java语言的特点 1 1.2.1 可移植性(universality) 1 1.2.2 安全性(security) 1 1.2.3 Java Virtual Machine(JVM) 2 1.2.4 面向对象的程序...

    基于javatcpsocket通信的拆包和装包源码-Java-Note:Java自学

    socket通信的拆包和装包源码 关于Java基础知识, JVM, 多线程, 计算机网络, 数据库, 分布式, 算法, Java框架, 测试, Linux等知识, 详细答案见/src/目录下的细分内容, 里面附有面经 Java基础 java关键字与保留字? goto...

    JAVA课程设计(1).doc

    其目的在于通过实践加深学生对面向对象程序设计的理论、 " "方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对 " "象知识分析实际问题、解决实际问题的能力。 " "2.课程设计任务...

    java面试宝典

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    整理后java开发全套达内学习笔记(含练习)

    进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...

    Java开发技术大全 电子版

    第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 2.3.7布尔型数据32 ...

    java自学之道

    3.1 Socket通信的一般结构 3.2 TCP Socket编程 3.2.1 Socket类 3.2.2 ServerSocket类 3.3 UDP Socket编程 八、Java概念疑难解答 第2章 Java经典练习题 2.1 斐波那契数列 2.2 判断素数 2.3 水仙花数 2.4 分解质因数 ...

Global site tag (gtag.js) - Google Analytics