总站首页 | 我要入驻 | 招生合作 | 您好,欢迎访问育优汇,希望本篇文章能够给您带来帮助!
育优汇网 > 动态汇总 > IT培训中心> 苏州Java培训机构前十名

苏州Java培训机构前十名

机构:IT培训中心 时间:2021-06-03 16:49:33 点击:95

导语概要

2007年03月 开设网络(Benet)校区;2006年12月 获《华西都市报》评选IT学校“最强师资奖”;2006年11月 获得《成都晚报》评选“最佳培训学校”;2006年12月 获得网络工程师认证培训资格;2006年04月 获得*劳动部授权OSTA软件认证培训中心;2006年03月 获得北大青鸟集团软件工程师认证培训资格...

  • IT培训学校

    IT培训学校

    IT设计、软件测试、前端、大数据等IT培训课程

    北京、上海、广州、深圳等多个城市有校区

Java Socket聊天程序核心代码讲解

Java Socket聊天程序在编写的时候需要我们注意很多的事情,本程序是基于Java Socket聊天程序,采用TCP传输协议,实现两个人之间的信息交互。下面我们就详细的向大家介绍这一程序。

在形成最终结果之前,我经历了两个过程程序,两个过程均为半成品,他们反映了我整个课程设计中的思考过程,在一个较为系统思考过程后,socket思想一层一层加固,让我映像很深刻,收获很多。在此文档中,我将演示我两个过程程序的思考过程,然后对源代码进行讲解,但最终上传的代码为制成品。

在两个过程程序中,TestServer1和TestClient1为第一个过程,TestServer2和TestClient2为第二个过程,MySingleThreadServer1和MySingleThreadClient1为最终程序。其中,TestServer2和TestClient2实现了多线程,一个线程负责接收,另一个线程负责发送,MySingleThreadServer1和MySingleThreadClient1实现了基于GUI的聊天。控件并非像MFC那样很容易就可以通过拖动组件实现,java是通过程序的编写来实现,我采用awt组件编码实现GUI,界面很简单,但花了不少时间来布局。

核心代码讲解:

三个过程程序都牵涉了Java Socket聊天程序最核心的思想,以下为核心的讲解。

1.服务器端

Java Socket服务器端需要引入两个包,java.io包和java.net包,io包是解决输入输出流的问题,而net包包含了socket编程所需的API.服务器端首先要得到ServerSocket的对象,即ServerSocket ss = new ServerSocket(5555); 5555为服务器端的端口号。Socket s = ss.accept();服务器端Socket对象通过accept()方法开始监听链接过来的客户端信息。如果有客户端有信息过来,则对象s调用输入输出流的方法,如s.getInputStream(),同时把得到的InputStream 封装在DataInputStream当中,在客户端与服务器端通信时,有可能两端存在于不同的操作系统,封装在DataInputStream可以很好的解决这个问题。

2.客户端

其实客户端代码与服务器端大多类似,有一点显着不同,在客户端没有ServerSocket类,即客户端不用监听任何链接,他只需要发送链接即可。Socket s = new Socket(String IPAddr,int port),IPAddr为服务器端的IP地址,port为服务器端的端口号即5555,由于本程序服务器端和客户端在同一主机上,所以服务器端IP地址为127.0.0.1。通过IPAddr和port两个参数就可以得到Java Socket聊天程序对象s,接下来的步骤就和服务器程序类似了。

对三个过程程序的详解

Procedure1:服务器端核心代码如下:

1.ServerSocket ss = new ServerSocket(5555);

2.Socket s = ss.accept();

3.OutputStream os = s.getOutputStream();

4.DataOutputStream dos = new DataOutputStream(os);

5.InputStream is = s.getInputStream();

6.DataInputStream dis = new DataInputStream(is);

7.InputStreamReader isr = new InputStreamReader(System.in);

//重键盘读入数据

8.BufferedReader br = new BufferedReader(isr);

//把从键盘读入的数据放入缓冲

9.String info;

10.while(true){

11.info = dis.readUTF();

12.System.out.println("客户端说:" + info);

13.if(info.equals("goodbye")){

14.break;

15.}

16.info = br.readLine();

17.dos.writeUTF(info);

18.System.out.println("服务器说:" + info);

19.if(info.equals("goodbye")){

20.break;

21.}

22.}

客户端核心代码如下:

23.Socket s = new Socket("127.0.0.1",5555);

24.InputStream is = s.getInputStream();

25.DataInputStream dis = new DataInputStream(is);

26.OutputStream os = s.getOutputStream();

27.DataOutputStream dos = new DataOutputStream(os);

28.InputStreamReader isr = new InputStreamReader(System.in);

29.BufferedReader br = new BufferedReader(isr);

30.String info;

31.while(true){

32.info = br.readLine();

33.System.out.println("客户端说的是:" + info);

34.dos.writeUTF(info);

35.if(info.equals("goodbye")){

36.break;

37.}

38.info = dis.readUTF(); //阻塞函数

39.System.out.println("服务器端说的是:" + info);

40.if(info.equals("goodbye")){

41.break;

42.}

43.}

服务器端和客户端在while(true)循环处各不相同,服务器端是dis.readUTF(),必须首先读取客户端传过来的信息,才能通过info = br.readLine();dos.writeUTF(info);从键盘中读取信息再发送给客户端。相反,客户端必须首先通过br.readLine();读取键盘信息,才能接收服务器发送来的信息。

思考1:这个简易的聊天程序已经实现了服务器和客户端的信息交互,但此时已经出现了一个必然出现的问题,比如拿服务器端来讲,当服务器通过dos.writeUTF(info)发送消息给客户端后,在while循环体内,他又要执行info = dis.readUTF()代码,而readUTF()是一个阻塞函数,如果客户端没有发送过来,他就阻塞在那个地方,此时下面部分的代码dos.writeUTF(info)就不能执行,即服务器端不能发送消息出去。

Java Socket聊天程序要怎样解决这个问题呢?怎样readUTF()阻塞的同时又可以writeUTF(info)发送出消息呢?显然,一条路径走不通时应该考虑走另一条路,于是,多线程在这里引入了。Procedure2就是这样出来的。


IT培训中心

IT培训学校推荐课程
  • IT培训机构课程

    大数据

  • IT培训机构课程

    智能物联网

  • IT培训机构课程

    Unity游戏开发

  • IT培训机构课程

    网络安全

  • IT培训机构课程

    互联网营销

  • IT培训机构课程

    影视剪辑包装

IT培训学校

2007年03月 开设网络(Benet)校区;2006年12月 获《华西都市报》评选IT学校“最强师资奖”;2006年11月 获得《成都晚报》评选“最佳培训学校”;2006年12月 获得网络工程师认证培训资格;2006年04月 获得*劳动部授权OSTA软件认证培训中心;2006年03月 获得北大青鸟集团软件工程师认证培训资格。2006年02月 北大青鸟成都锦江校区成立;2012年,我校荣获北大青鸟年度"聚英奖"及"教学质量"、"就业服务"双项大奖,2012年荣获总部排名前三奖"卓越教育风云人物奖"并成为北大青鸟职业研究促进中心理事,北大青鸟机构中运营资历深、合作名企多、教学环境优越、学员数量非常多的教育机构中心之一,2012年,我校荣获北大青鸟年度"聚英奖"及"教学质量"、"就业服务"双项大奖。


IT培训机构

IT课程分类

  • IT课程推荐

    HTML5

  • IT课程推荐

    Java

  • IT课程推荐

    Python

  • IT课程推荐

    全链路设计

  • IT课程推荐

    云计算

  • IT课程推荐式

    软件测试

  • 零基础

    零基础

    对IT设计有兴趣,希望从事IT行业

  • 有基础

    有基础

    强化自己能力,加强专业技能

  • 在校大学生

    在校大学生

    丰富职场技能,毕业不失业

  • 不满于现状

    不满于现状

    提升专业水平,轻松升职加薪