3一对一聊天程序(JAVA)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
System.out.println("a client connected!"); new Thread(c).start(); clients.add(c); //dis.close();
} } catch (IOException e) {
e.printStackTrace(); } finally {
TextField tfTxt = new TextField();
TextArea taContent = new TextArea();
Thread tRecv = new Thread(new RecvThread());
public static void main(String[] args) { new ChatClient().launchFrame();
} } /* Catch 到任何的 Exception 都要把 s 等服务器端的运行项关闭,可能是 客户端那端已经关闭了,也可能是中间传输的时候出现了意外情况,导
致链接中断
*/ public void run() {
try { while(bConnected) { String str = dis.readUTF();
System.out.println("connected!"); bConnected = true;
} catch (UnknownHostException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace();
try { ss.close();
} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();
} } } /* 线程的应用,进行变量的初始化
*/ class Client implements Runnable {
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,dis,s 等还在运行的服务程序,因为系统 不会自动关闭这些运行的程序,需要自己编写代码关闭这些程序,否则这些程序 会一直运行下去 */ public void disconnect() {
try { dos.close(); dis.close(); s.close();
dos.writeUTF(str); dos.flush(); //dos.close(); } catch (IOException e1) { e1.printStackTrace(); }
}
} /* 重写 run 方法,做关闭程序后的一些处理 */ private class RecvThread implements Runnable {
到 BindException 时,系统会打印出“端口使用中.... 请关掉相关程序并重新运 行服务器!”
*/ public void start() {
try { ss = new ServerSocket(8888); started = true;
} catch (BindException e) { System.out.println("端口使用中...."); System.out.println("请关掉相关程序并重新运行服务器!"); System.exit(0);
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(); }
} /* 数据的读写
*/ public void send(String str) {
try { dos.writeUTF(str);
} catch (IOException e) { clients.remove(this); System.out.println("对方退出了!我从 List 里面去掉了!"); //e.printStackTrace();
dos.close(); dis.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } }
*/ } /* 在客户端和服务器端分别进行读写数据 */ private class TFListener implements ActionListener {
@Override public void windowClosing(WindowEvent arg0) {
disconnect(); System.exit(0); }
}); tfTxt.addActionListener(new TFListener()); setVisible(true); connect();
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);
} /* 设置聊天窗口,包括当程序启动时窗口的位置,大小等 */
public void launchFrame() { setLocation(400, 300); this.setSize(300, 300); add(tfTxt, BorderLayout.SOUTH); add(taContent, BorderLayout.NORTH); pack(); this.addWindowListener(new WindowAdapter() {
} catch (IOException e) { e.printStackTrace();
} /*
此时用一个 while 循环,来判断是否启动了服务器,当启动服务器时, 就执行 while 循环,创建一个新的客户端
try {
while(started) { Socket s = ss.accept(); Client c = new Client(s);
} */ /* 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; }
计算机网络与通信实习报告
实习题目
一对一聊天程序(java)
学生专业班级
学生姓名(学号)
指导教师
完成时间
2010 年 5 月 21 日
实 习(设计)地点 信息楼 139 机房
2010 年 5 月 21 日
一、实习题目 实现一个一对一的聊天程序
二、原理概述 在编程软件的基础上采用 TCP 协议的网络编程实现一款点对点的聊天程序,
} catch (IOException e1) { e1.printStackTrace();
}
} }
} }
客户端程序: ChatClient :
import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*;
} catch (IOException e) { e.printStackTrace();
}
/* try {
bConnected = false; tRecv.join(); } catch(InterruptedException e) { e.printStackTrace(); } finally { try {
使用 Java 语言编写,将程序设计分为客户端和服务器端。 其中此程序客户端和服务器端链接时,首先输入服务器端的 IP 地址和端口
号,当 IP 地址正确并且端口号没有被占用时,可以进行客户端和服务器端的链 接,,在客户端与服务器端相连后,在发送的文本框中输入你想发送的信息,然 后点击发送客户端(服务器端)就能在文本框中显示相应的内容。当服务器和客 户端没有链接或断开的时候信息不可以发送并能提示“没有与服务器链接”。
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) { new ChatServer().start();
} /* 创建服务器链接的服务端口,此程序中用的端口号是 8888,当 8888 端口正 在使用时,用 try...catch 来捕捉错误(BindException 和 IOException),当捕捉
/*
初始化变量 */ public class ChatClient extends Frame {
Socket s = null; DataOutputStream dos = null; DataInputStream dis = null; private boolean bConnected = false;
public void actionPerformed(ActionEvent e) { String str = tfTxt.getText().trim(); //taContent.setText(str); tfTxt.setText("");
try { //System.out.println(s);
三、设计方案 1、根据实习任务书确定程序编写目标,主要功能,时间安排等。 2、分析需求,确定程序主要框架、所需要的编程语言、以及开发环境。 3、研究研究一对一聊天程序的主要功能,一对一聊天程序的原理。 4、按需求创建项目,开始编码。 5、完成编码,进行单元测试和系统测试。 6、完成测试,进行封装,用 Eclipse 直接打包成 jar 文件。
四、程序编写 这是直接在 MyEclipse6.0.1 环境下进行的编程开发
服务器端程序: ChatServer :
import java.io.*; import java.net.*; import java.util.*;
public class ChatServer { boolean started = false; ServerSocket ss = null;
} } catch (IOException e) {
e.printStackTrace(); } finally {
TextField tfTxt = new TextField();
TextArea taContent = new TextArea();
Thread tRecv = new Thread(new RecvThread());
public static void main(String[] args) { new ChatClient().launchFrame();
} } /* Catch 到任何的 Exception 都要把 s 等服务器端的运行项关闭,可能是 客户端那端已经关闭了,也可能是中间传输的时候出现了意外情况,导
致链接中断
*/ public void run() {
try { while(bConnected) { String str = dis.readUTF();
System.out.println("connected!"); bConnected = true;
} catch (UnknownHostException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace();
try { ss.close();
} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();
} } } /* 线程的应用,进行变量的初始化
*/ class Client implements Runnable {
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,dis,s 等还在运行的服务程序,因为系统 不会自动关闭这些运行的程序,需要自己编写代码关闭这些程序,否则这些程序 会一直运行下去 */ public void disconnect() {
try { dos.close(); dis.close(); s.close();
dos.writeUTF(str); dos.flush(); //dos.close(); } catch (IOException e1) { e1.printStackTrace(); }
}
} /* 重写 run 方法,做关闭程序后的一些处理 */ private class RecvThread implements Runnable {
到 BindException 时,系统会打印出“端口使用中.... 请关掉相关程序并重新运 行服务器!”
*/ public void start() {
try { ss = new ServerSocket(8888); started = true;
} catch (BindException e) { System.out.println("端口使用中...."); System.out.println("请关掉相关程序并重新运行服务器!"); System.exit(0);
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(); }
} /* 数据的读写
*/ public void send(String str) {
try { dos.writeUTF(str);
} catch (IOException e) { clients.remove(this); System.out.println("对方退出了!我从 List 里面去掉了!"); //e.printStackTrace();
dos.close(); dis.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } }
*/ } /* 在客户端和服务器端分别进行读写数据 */ private class TFListener implements ActionListener {
@Override public void windowClosing(WindowEvent arg0) {
disconnect(); System.exit(0); }
}); tfTxt.addActionListener(new TFListener()); setVisible(true); connect();
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);
} /* 设置聊天窗口,包括当程序启动时窗口的位置,大小等 */
public void launchFrame() { setLocation(400, 300); this.setSize(300, 300); add(tfTxt, BorderLayout.SOUTH); add(taContent, BorderLayout.NORTH); pack(); this.addWindowListener(new WindowAdapter() {
} catch (IOException e) { e.printStackTrace();
} /*
此时用一个 while 循环,来判断是否启动了服务器,当启动服务器时, 就执行 while 循环,创建一个新的客户端
try {
while(started) { Socket s = ss.accept(); Client c = new Client(s);
} */ /* 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; }
计算机网络与通信实习报告
实习题目
一对一聊天程序(java)
学生专业班级
学生姓名(学号)
指导教师
完成时间
2010 年 5 月 21 日
实 习(设计)地点 信息楼 139 机房
2010 年 5 月 21 日
一、实习题目 实现一个一对一的聊天程序
二、原理概述 在编程软件的基础上采用 TCP 协议的网络编程实现一款点对点的聊天程序,
} catch (IOException e1) { e1.printStackTrace();
}
} }
} }
客户端程序: ChatClient :
import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*;
} catch (IOException e) { e.printStackTrace();
}
/* try {
bConnected = false; tRecv.join(); } catch(InterruptedException e) { e.printStackTrace(); } finally { try {
使用 Java 语言编写,将程序设计分为客户端和服务器端。 其中此程序客户端和服务器端链接时,首先输入服务器端的 IP 地址和端口
号,当 IP 地址正确并且端口号没有被占用时,可以进行客户端和服务器端的链 接,,在客户端与服务器端相连后,在发送的文本框中输入你想发送的信息,然 后点击发送客户端(服务器端)就能在文本框中显示相应的内容。当服务器和客 户端没有链接或断开的时候信息不可以发送并能提示“没有与服务器链接”。
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) { new ChatServer().start();
} /* 创建服务器链接的服务端口,此程序中用的端口号是 8888,当 8888 端口正 在使用时,用 try...catch 来捕捉错误(BindException 和 IOException),当捕捉
/*
初始化变量 */ public class ChatClient extends Frame {
Socket s = null; DataOutputStream dos = null; DataInputStream dis = null; private boolean bConnected = false;
public void actionPerformed(ActionEvent e) { String str = tfTxt.getText().trim(); //taContent.setText(str); tfTxt.setText("");
try { //System.out.println(s);
三、设计方案 1、根据实习任务书确定程序编写目标,主要功能,时间安排等。 2、分析需求,确定程序主要框架、所需要的编程语言、以及开发环境。 3、研究研究一对一聊天程序的主要功能,一对一聊天程序的原理。 4、按需求创建项目,开始编码。 5、完成编码,进行单元测试和系统测试。 6、完成测试,进行封装,用 Eclipse 直接打包成 jar 文件。
四、程序编写 这是直接在 MyEclipse6.0.1 环境下进行的编程开发
服务器端程序: ChatServer :
import java.io.*; import java.net.*; import java.util.*;
public class ChatServer { boolean started = false; ServerSocket ss = null;