《java程序设计》实验指导书(09高职) 联系客服

发布时间 : 星期五 文章《java程序设计》实验指导书(09高职)更新完毕开始阅读

山东信息职业技术学院java实验报告

实验十五 网络通信

一、实验目的

1.理解网络通信的原理和常用通信技术的概念; 2.掌握基于TCP协议的套接字的网络编程方法 3.掌握网络通信在实际应用开发程序中的应用。 二、实验内容

案例 聊天程序解析

通过建立一个Socket客户端和一个ServerSocket服务端进行实时数据交换。运行时先打开服务器端,然后再打开客户端,单击客户端的“连接服务器”按钮将与服务器建立连接;连接之后,双方在各自图形界面的文本框中填写要发送的信息,然后单击 “Send”按钮,就可以进行通信了。程序运行结果如图1所示。整个程序分成客户端和服务器端两大部分,分别保存成Client.java和Server.java两个文件。

图1 聊天程序运行界面(客户端和服务器端)

1.客户端程序代码: import java.net.*; import java.io.*; import java.awt.*;

import java.awt.event.*; import javax.swing.*;

class Client extends JFrame implements ActionListener

{ Socket sock; //定义套接字对象 JTextArea t1=new JTextArea(); JTextField t2=new JTextField(20); JButton b1=new JButton(\ JButton b2=new JButton(\连接服务器\ DataOutputStream out; //定义数据输出流 DataInputStream in; //定义数据输出流 public Client()

{ JScrollPane jsp=new JScrollPane(t1); this.getContentPane().add(jsp,\ JPanel p1=new JPanel(); p1.add(t2); p1.add(b1); JPanel p2=new JPanel(); p2.add(b2); this.getContentPane().add(p2,\ this.getContentPane().add(p1,\ b1.addActionListener(this); b2.addActionListener(this); setTitle(\客户端\ setSize(340,200); setVisible(true);

29

山东信息职业技术学院java实验报告

addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e)

{

}); }

public void actionPerformed(ActionEvent e) {

} else {

} }

public static void main(String agrs[]) {

30

山东信息职业技术学院java实验报告

Client mainFrame=new Client(); } }

class Communnion extends Thread { Client fp; Communnion(Client fp)

{ this.fp=fp; } public void run()

{ String msg=null; while(true)

{

} try{ fp.out.close(); //关闭Socket输出流 fp.in.close(); //关闭Socket输入流 fp.sock.close(); //关闭Socket }catch(Exception ee){} } }

2.服务器端代码: import java.net.*; import java.io.*; import java.awt.*;

import java.awt.event.*; import javax.swing.*;

class Server extends JFrame implements ActionListener { ServerSocket serverSock; //定义服务器套接字 Socket sock; //定义客户套接字 JTextArea t1=new JTextArea(); JTextField t2=new JTextField(20);

31

山东信息职业技术学院java实验报告

JButton b1=new JButton(\

DataOutputStream out; //定义数据输出流 DataInputStream in; //定义数据输入流 String cname=null; public Server() {

JScrollPane jsp=new JScrollPane(t1); this.getContentPane().add(jsp,\ JPanel p1=new JPanel(); p1.add(t2); p1.add(b1); this.getContentPane().add(p1,\ b1.addActionListener(this); setTitle(\服务器\ setSize(340,200); setVisible(true); try{ sock=serverSock.accept(); //使用accept()阻塞等待客户请求, //有客户请求到来则产生一个Socket对象,并继续执行 out=new DataOutputStream(sock.getOutputStream()); //由Socket对象得到输入流,并构造相应的DataOutputStream对象 in=new DataInputStream(sock.getInputStream());

//由socket对象得到输出流,并构造DataInputStream对象

out.writeUTF(\你连接服务器成功\ // 给客户反馈信息 Communnion th=new Communnion(this); //建立与客户端交互的线程 th.start(); // 启动线程 }catch(Exception e){} addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e)

{ try{

out.writeUTF(\ //退出时告诉客户端 }catch(Exception ee){} dispose(); System.exit(0); } }); }

public void actionPerformed(ActionEvent e) {

32