当前位置:
文档之家› 3一对一聊天程序(JAVA)
3一对一聊天程序(JAVA)
public void actionPerformed(ActionEvent e) { String str = tfTxt.getText().trim(); //taContent.setText(str); tfTxt.setText("");
try { //System.out.println(s);
dos.writeUTF(str); dos.flush(); //dos.close(); } catch (IOException e1) { e1.printStackTrace(); }
}
} /* 重写 run 方法,做关闭程序后的一些处理 */ private class RecvThread implements Runnable {
三、设计方案 1、根据实习任务书确定程序编写目标,主要功能,时间安排等。 2、分析需求,确定程序主要框架、所需要的编程语言、以及开发环境。 3、研究研究一对一聊天程序的主要功能,一对一聊天程序的原理。 4、按需求创建项目,开始编码。 5、完成编码,进行单元测试和系统测试。 6、完成测试,进行封装,用 Eclipse 直接打包成 jar 文件。
使用 Java 语言编写,将程序设计分为客户端和服务器端。 其中此程序客户端和服务器端链接时,首先输入服务器端的 IP 地址和端口
号,当 IP 地址正确并且端口号没有被占用时,可以进行客户端和服务器端的链 接,,在客户端与服务器端相连后,在发送的文本框中输入你想发送的信息,然 后点击发送客户端(服务器端)就能在文本框中显示相应的内容。当服务器和客 户端没有链接或断开的时候信息不可以发送并能提示“没有与服务器链接”。
} */ /* Iterator<Client> it = clients.iterator(); while(it.hasNext()) {
Client c = it.next(); c.send(str); } */ } } catch (EOFException e) { System.out.println("Client closed!"); } catch (IOException e) { e.printStackTrace(); } finally { try { if(dis != null) dis.close(); if(dos != null) dos.close(); if(s != null) { s.close(); //s = null; }
} catch (IOException e1) { e1.pri
} }
客户端程序: ChatClient :
import java.awt.*; import java.awt.event.*; import java.io.*; import .*;
到 BindException 时,系统会打印出“端口使用中.... 请关掉相关程序并重新运 行服务器!”
*/ public void start() {
try { ss = new ServerSocket(8888); started = true;
} catch (BindException e) { System.out.println("端口使用中...."); System.out.println("请关掉相关程序并重新运行服务器!"); System.exit(0);
}
} /* 此段程序是当断开链接时,关闭 dos,dis,s 等还在运行的服务程序,因为系统 不会自动关闭这些运行的程序,需要自己编写代码关闭这些程序,否则这些程序 会一直运行下去 */ public void disconnect() {
try { dos.close(); dis.close(); s.close();
@Override public void windowClosing(WindowEvent arg0) {
disconnect(); System.exit(0); }
}); tfTxt.addActionListener(new TFListener()); setVisible(true); connect();
System.out.println("connected!"); bConnected = true;
} catch (UnknownHostException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace();
private Socket s; private DataInputStream dis = null;
private DataOutputStream dos = null; private boolean bConnected = false;
public Client(Socket s) { this.s = s; try { dis = new DataInputStream(s.getInputStream()); dos = new DataOutputStream(s.getOutputStream()); bConnected = true; } catch (IOException e) { e.printStackTrace(); }
System.out.println(str); for(int i=0; i<clients.size(); i++) { Client c = clients.get(i); c.send(str);
//System.out.println(" a string send !"); } /* for(Iterator<Client> it = clients.iterator(); it.hasNext(); ) { Client c = it.next(); c.send(str);
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) { new ChatServer().start();
} /* 创建服务器链接的服务端口,此程序中用的端口号是 8888,当 8888 端口正 在使用时,用 try...catch 来捕捉错误(BindException 和 IOException),当捕捉
} catch (IOException e) { e.printStackTrace();
}
/* try {
bConnected = false; tRecv.join(); } catch(InterruptedException e) { e.printStackTrace(); } finally { try {
计算机网络与通信实习报告
实习题目
一对一聊天程序(java)
学生专业班级
学生姓名(学号)
指导教师
完成时间
2010 年 5 月 21 日
实 习(设计)地点 信息楼 139 机房
2010 年 5 月 21 日
一、实习题目 实现一个一对一的聊天程序
二、原理概述 在编程软件的基础上采用 TCP 协议的网络编程实现一款点对点的聊天程序,
System.out.println("a client connected!"); new Thread(c).start(); clients.add(c); //dis.close();
} } catch (IOException e) {
e.printStackTrace(); } finally {
} } /* Catch 到任何的 Exception 都要把 s 等服务器端的运行项关闭,可能是 客户端那端已经关闭了,也可能是中间传输的时候出现了意外情况,导
致链接中断
*/ public void run() {
try { while(bConnected) { String str = dis.readUTF();
tRecv.start(); } /* 此段程序是服务器和客户端链接的程序,创建套接字,“铺设”数据流管道, 用来传达服务器和客户端的信息
*/ public void connect() {
try { s = new Socket("127.0.0.1", 8888); dos = new DataOutputStream(s.getOutputStream()); dis = new DataInputStream(s.getInputStream());
dos.close(); dis.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } }
*/ } /* 在客户端和服务器端分别进行读写数据 */ private class TFListener implements ActionListener {
try { ss.close();
} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();
} } } /* 线程的应用,进行变量的初始化
*/ class Client implements Runnable {
四、程序编写 这是直接在 MyEclipse6.0.1 环境下进行的编程开发
服务器端程序: ChatServer :
import java.io.*; import .*; import java.util.*;