当前位置:文档之家› 基于TCP协议的Socket编程

基于TCP协议的Socket编程

软件设计实验报告(二)

一、实验目的

掌握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();

相关主题