实验六聊天软件

  • 格式:doc
  • 大小:64.50 KB
  • 文档页数:4

南昌航空大学实验报告
2014年 5 月 5 日
课程名称: 计算机网络 实验名称: 基于C/S的聊天软件
班级: 110451 姓名: 曹海潮 学号: 11045106
指导老师评定: 签名:

一、实验目的
加深对C/S通信方式的了解和认识,并通过软件编程实现客户端和服务器之间的通信。
二、实验环境
Eclipse开发软件
三、C/S方式简介

C/S方式是因特网上最常用的,也是最传统的方式。客户(client)和服务器(server)都是
指通信中所涉及的连个应用进程。客户-服务器方式所描述的是进程之间服务和被服务的关
系,客户是服务请求方,服务器是服务的提供方。
在实际应用中,客户程序和服务器程序通常还具有以下一些主要的特点。
客户程序:
1.被用户调用后运行,在通信时主动向原地服务器发起通信。因此,客户程序必须知道
服务器程序的地址。
2.不需要特殊的硬件和很复杂的操作系统。
服务器程序:
1.是一种专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求。
2.系统启动后即自动调用并一直不断地运行着,被动地等待并接受来自各地的客户的通
信请求。因此,服务器程序不需要知道客户程序的地址。
3.一般需要有强大的硬件和高级的操作系统支持。
四、代码实现
客户端程序:
package liaoTian;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class Client extends JFrame implements ActionListener{

private String name;
private Socket socket;
private JTextArea textFuck;
private JTextField textShit;
private JButton button1,button2;
private PrintWriter cout;
public int data;
public String str;

public Client(String name,Socket socket) throws IOException {
super("聊天室 "+name+" "+InetAddress.getLocalHost());
this.setBounds(320,240,360,240);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.textFuck=new JTextArea();
this.textFuck.setEditable(false);
this.getContentPane().add(new JScrollPane(this.textFuck));
JPanel panel=new JPanel();
this.getContentPane().add(panel,"South");
this.textShit=new JTextField(16);
panel.add(this.textShit);
button1=new JButton("发送");
panel.add(button1);
button1.addActionListener(this);
button2=new JButton("离线");
panel.add(button2);
button2.addActionListener(this);
this.setVisible(true);
this.name=name;
this.socket=socket;
this.cout=new PrintWriter(socket.getOutputStream(),true);
this.cout.println(name);
BufferedReader cin=new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String aline=cin.readLine();
textFuck.append("连接"+aline+"成功"+"\r\n");
aline=cin.readLine();
while(aline!=null&&!aline.equals("bye")){
textFuck.append(aline+"\r\n");
aline=cin.readLine();
}
cin.close();
cout.close();
socket.close();
button1.setEnabled(false);
button2.setEnabled(false);
}

public Client(String name,String host,int port)throws IOException{
this(name,new Socket(host,port));
}

@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==button1){
str = textShit.getText();
data = Integer.parseInt(str);
data = data+10;
this.cout.println(name+"说:"+data);
this.textFuck.append("我说:"+textShit.getText()+"\n");
textShit.setText("");
}
if(e.getSource()==button2){
textFuck.append("我离线\n");
this.cout.println(name+"离线\n"+"bye");
button1.setEnabled(false);
button2.setEnabled(false);
}
}
public static void main(String[] args)throws IOException{
new Client("客户端","127.0.0.1",2001);
}
}
服务器端程序:
package liaoTian;
import java.io.*;
import java.net.*;
public class Server{
public Server(int port,String name)throws IOException{
ServerSocket serket=new ServerSocket(port);
Socket clients=serket.accept();
new Client(name,clients);
serket.close();
}

public static void main(String[] args) throws IOException {
new Server(2001,"服务器");
}
}
运行结果:

五、实验小结
通过本次实验使我对客户—服务器方式的通信原理有了进一步的认识,即只
有当链接建立成功后才可以进行通信,并通过Java中的Socket通信实现了本次实
现的效果显示,而且我也进一步熟悉了如何利用Java语言进行程序设计及软件的
开发。