浅谈Java网络编程之Socket.pdf

上传人:qwe****56 文档编号:70011294 上传时间:2023-01-14 格式:PDF 页数:7 大小:17.90KB
返回 下载 相关 举报
浅谈Java网络编程之Socket.pdf_第1页
第1页 / 共7页
浅谈Java网络编程之Socket.pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《浅谈Java网络编程之Socket.pdf》由会员分享,可在线阅读,更多相关《浅谈Java网络编程之Socket.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 浅谈浅谈 Java 网络编程之网络编程之 Socket 下面要和大家一起分享的是 Java 网络编程之 Socket。在 Java 中 Socket 可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是 getInputStream 方法,另一个是 getOutputStream 方法。getInputStream 方法可以得到一个输入流,客户端的 Socket 对象上的 getInputStream 方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream 方法得到一个输出流,客户端 Socket 对象上的 getOutputStream 方

2、法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考 Java 中流的实现部分)。一、建立服务器类 Java 中有一个专门用来建立 Socket 服务器的类,名叫 ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。ServerSocket server=new ServerSocket(9998)这条语句创建了一个服务器对象,这个服务器使用 9998 号端口。当一个客户端程序建立一个 Socket 连接,所连接的端口号

3、为 9998 时,服务器对象 server便响应这个连接,并且 server.accept()方法会创建一个 Socket 对象。服务器端便可以利用这个 Socket 对象与客户进行通讯。Socket incoming=server.accept()进而得到输入流和输出流,并进行封装 BufferedReader in=new BufferedReader(new InputStreamReader(incoming.getInputStream();PrintWriter out=new PrintWriter(incoming.getOutputStream(),true);随后,就可以使

4、用 in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。在所有通讯结束以后应该关闭这两个数据流,关闭的顺序是先关闭输出流,再关闭输入流,即使用 out.close();in.close();二、建立客户端代码 相比服务器端,客户端要简单一些,客户端只需用服务器所在机器的 ip 以及服务器的端口作为参数创建一个 Socket 对象。得到这个对象后,就可以用建立服务器部分介绍的方法实现数据的输入和输出。Socket socket=new Socket(168.160.12.42,9998);in

5、=new BufferedReader(new InputStreamReader(socket.getInputStream();out=new PrintWriter(socket.getOutputStream(),true);以上的程序代码建立了一个 Socket 对象,这个对象连接到 ip 地址为168.160.12.42 的主机上、端口为 9998 的服务器对象。并且建立了输入流和输出流,分别对应服务器的输出和客户端的写入。三、建立用户界面 读者可以根据自己的喜好建立自己的用户界面,这不是本文的重点。经过以上三个步骤,就可以建立一个比较简单的对话程序。但是,为了使这个程序更加完善,

6、应进行以下几个改进:一、现在服务器只能服务一个客户,也就是单线程的。可以将它改进为多线程服务器。try file:/建立服务器 ServerSocket server=new ServerSocket(9998);int i=1;for(;)Socket incoming=server.accept();new ServerThread(incoming,i).start();i+;catch(IOException ex)ex.printStackTrace();循环检测是否有客户连接到服务器上,如果有,则创建一个线程来服务这个客户,这个线程的名称是 ServerThread,这个类扩展了

7、Thread 类,它的编写方法与前述的服务器的写法相同。二、为了可以随时得到对方传送过来的消息,可以在服务器以及客户端各建立一个独立的线程来察看输入流,如果输入流中有输入,则可以即时显示出来。代码如下:new Thread()public void run()try while(true)checkInput();sleep(1000);/每 1000 毫秒检测一次 catch(InterruptedException ex)catch(IOException ex).start();其中的 checkInput()方法为 private void checkInput()throws IOE

8、xception String line;if(line=in.readLine()!=null)file:/检测输入流中是否有新的数据 t.setPartner(line);file:/将数据流中的消息显示出来 通过以上改进,程序就可以比较好的运行了。import .*;import java.io.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class talkServer public static void main(String args)try file:/建立服务器

9、 ServerSocket server=new ServerSocket(9998);int i=1;for(;)Socket incoming=server.accept();new ServerThread(incoming,i).start();i+;catch(IOException ex)ex.printStackTrace();class ServerThread extends Thread implements ActionListener private int threadNum;private Socket socket;talkServerFrm t;Buffered

10、Reader in;PrintWriter out;private boolean talking=true;public ServerThread(Socket s,int c)threadNum=c;socket=s;public void actionPerformed(ActionEvent e)Object source=e.getSource();try if(source=t.btnSend)out.println(t.getTalk();t.clearTalk();else if(source=t.btnEnd)out.println(谈话过程被对方终止);out.close(

11、);in.close();talking=false;catch(IOException ex)public void run()try t=new talkServerFrm(new Integer(threadNum).toString(),this);t.setSize(500,500);t.show();in=new BufferedReader(new InputStreamReader(socket.getInputStream();out=new PrintWriter(socket.getOutputStream(),true);catch(Exception e)new Th

12、read()public void run()try while(true)checkInput();sleep(1000);catch(InterruptedException ex)catch(IOException ex).start();while(talking)t.dispose();private void checkInput()throws IOException String line;if(line=in.readLine()!=null)t.setPartner(line);file:/这是界面类里的方法,file:/用来将 line 的内容输出到用户界面 转载出处:程序员之家

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁