聊天器第一版--java

一、实验名称

Java聊天室

二、实验目的与要求

1.目的:编写一个小型Java聊天室系统,掌握Java网络通信、多线程、IO文件操作等高级应用编程技能。
2.要求:以课本第15章 Java网络通信例15.3、15.4的源代码为基础,编写一个基于TCP socket套接字的小型C/S Java聊天室系统。
3.完成如下功能:
a、多客户端模式下,实现客户与客户的单独通信,要求信息通过服务器中转
b、端到端的通信,实现并行通信模式(不再是你说一句,我说一句,一端的信息发送不受另一端的影响)
c、实现端到端的文件传输
d、添加图形界面

三、实验步骤与问题

运行课本例15.3的支持单客户的TCP socket套接字C/S程序。

客户端:

第一步:创建Socket
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
//向本机的4700端口发出客户请求
Socket socket=new   
       Socket("127.0.0.1",4700);
}catch(IOException e) {
  System.out.println("can not listen to:"+e); 
}
第二步:获取连接到套接字的输入输出流
//由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由系统标准输入设备构造BufferedReader对象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
第三步:对Socket的输入输出流进行读写操作
String readline;
readline=sin.readLine(); //从系统标准输入读入一字符串
while(!readline.equals("bye")){
   //将从系统标准输入读入的字符串输出到Server
   os.println(readline);
   os.flush();//刷新输出流,使Server马上收到该字符串
   //在系统标准输出上打印读入的字符串
   System.out.println("Client:"+readline);
   //从Server读入一字符串,并打印到标准输出上
   System.out.println("Server:"+is.readLine());
   readline=sin.readLine(); //从系统标准输入读入一字符串
}
第四步:关闭Socket
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket

服务器端:

第一步:创建Socket
import java.io.*;
import java.net.*;
public class TalkServer{
public static void main(String args[]) {
   ServerSocket server=null;
try{ 
   //创建一个ServerSocket在端口4700监听客户请求
   server=new ServerSocket(4700); 
}catch(IOException e) {
  System.out.println("can not listen to:"+e); 
}
Socket socket=null;
try{
//使用accept()阻塞等待客户请求,有客户请求到来则产生一个Socket对象,并继续执行
     socket=server.accept();
}catch(IOException e){
    System.out.println("Error."+e);
}
第二步:获取连接到套接字的输入输出流
//由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is=new BufferedReader(new 
InputStreamReader(socket.getInputStream()));
//由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由系统标准输入设备构造BufferedReader对象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
第三步:对Socket的输入输出流进行读写操作
//在标准输出上打印从客户端读入的字符串
System.out.println("Client:"+is.readLine());
line=sin.readLine();//从标准输入读入一字符串
while(!line.equals("bye")){
   os.println(line);   //向客户端输出该字符串
   os.flush();   //刷新输出流,使Client马上收到该字符串
   System.out.println("Server:"+line);
   //从Client读入一字符串,并打印到标准输出上
   System.out.println("Client:"+is.readLine());
   line=sin.readLine(); //从系统标准输入读入一字符串
}
第四步:关闭Socket

os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
server.close(); //关闭ServerSocket

/在本机上建立Java工程,分别运行客户端、服务端程序,切换客户端/服务端控制台,交替输入聊天消息,体验客户端/服务端聊天对话过程。但是启动一次服务端程序,启动两次客户端程序,在两个客户端控制台输入聊天消息,观察服务端的控制台运行结果,此时服务端程序仅能支持第一个客户端的请求。
运行结果:刚开始的时候由于学习不够细心,直接先运行了客户端的代码,报错:can not listen to:java.net.ConnectException: Connection timed out: connect
后来经过探讨后,才明白,需要先启动服务端,等待客户端发送请求,当收到客户端请求之后,客户端得以与服务端连接,然后服务端再确认消息段,之后才开始通信。
/

聊天器第二版–java

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值