软件设计实验报告(二)
一、实验目的
掌握TCP传输中服务端和客户端程序的设计。
掌握TCP传输中服务端和客户端程序的设计。
掌握SOCKET套接字的应用。
二、实验内容
根据一个TCP网络应用,从需求出发,分析TCP协议及Java相关的类,进行TCP 服务器端及客户端的设计并开发,经过测试、调整,实现TCP网络编程,以理解
掌握如何应用Java技术来实现TCP协议编程。
要求:使用Java Application 实现Socket编程,进行两台机器的通信,能进行双方
的会话。
三、实验过程及结果
Java中的网络编程是一个很重要的部分,也是其编程优越之一。在Java中有一个专门的类库来管理网络编程的有关方法。
在Java中用Socket进行客户/服务器之间的通信编程。Socket是两个实体之间进行通信的有效断点。通过Socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。
要想与服务器通信必须具备3个条件:服务器程序、客户程序和连接它们的Socket程序。这3个部分缺一不可。但是,客户与服务器之间的通信有很多方式,其中一个方式是把客户作为索取者,把服务器作为给予者。
服务器的两个主要的功能:①在类库中通过构造一个ServerSokcet类的实例使服务器能够检测到指定端口信息。用ServerSocket中的accept()方法可以使服务器检测到指定端口的活动。另外,服务器还负责检测要求与它连接的客户。Socket类的实例代表客户与服务器连接成功。通过编程可以使多个用户通过同一个端口与服务器相连,其中都是Socket 类的实例。②可以分别用Socket类的getInputStream()和getOutSream()方法来发送和捕捉数据。
相比服务器端而言,客户端简单一些,客户端只需用服务器所在机器的地址以及服务器的
端口作为参数创建一个Socket对象。得到这个对象后,就可以用“建立服务器”部分的方法实现数据的输入和输出。
toclient=new Socket(InetAddress.getByName(chatServer),4000);
outputS=new ObjectOutputStream(toclient.getOutputStream());
inputS=new ObjectInputStream(toclient.getInputStream());
以上的程序代码建立了一个Socket对象,这个对象连接到IP地址为InetAddress.getByName(chatServer)值的主机上(Localhost),端口为4000的服务器对象。并且建立了输入流和输出流,分别对应服务器的输出和客户端的写入。
服务器端程序:
import .*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import ng.*;
public class myserver extends JFrame implements ActionListener {
static String s;
static PrintStream PS;
static BufferedReader BR;
public void actionPerformed(ActionEvent e)
{
s=tf.getText();
if(e.getSource()==btok)
{
ta.append("你说: "+tf.getText()+"\n");
tf.setText("");
}
if(e.getSource()==cancel)
System.exit(0);
PS.println(s);
}
JButton btok=new JButton("发送");
JButton cancel=new JButton("退出");
static JTextField tf=new JTextField(22);
static JTextArea ta=new JTextArea(10,20);
int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS;
int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS;
JScrollPane jsp=new JScrollPane(ta,v,h);
myserver()
{super("服务器");
Container c=getContentPane();
c.setLayout(new FlowLayout());
c.add(jsp);
c.add(tf);
c.add(btok);
c.add(cancel);
btok.addActionListener(this);
cancel.addActionListener(this);
setSize(300,320);
setVisible(true);
}
public static void main(String args[])
{new myserver();
ServerSocket server;
Socket socket;
InputStream Is;
OutputStream Os;
try
{server=new ServerSocket(4321);
socket=server.accept();
System.out.println("server ok");
System.out.println("*****************************"); System.out.println("");
Is=socket.getInputStream();
Os=socket.getOutputStream();
BR=new BufferedReader(new InputStreamReader(Is)); PS=new PrintStream(Os);
DataInputStream in=new DataInputStream(System.in); while(true)
{System.out.println("");
System.out.println("Please wait client's message..."); System.out.println("");
s=BR.readLine();
System.out.println("client said: "+s);
ta.append("client 说"+s+"\n");
if(s.trim().equals("BYE"))break;
}
BR.close();
PS.close();
Is.close();