码云地址“https://gitee.com/”
使用套接写连接编写一个简单的聊天室程序,客户端主函数放在Client_Main.java文件中,服务器端主函数放在Server_Main.java文件中
要求:
1.客户端从控制台进行输入,并将客户端的输出内容和时间保存到“学号.txt”文件中
2.服务器端读取到客户端的程序后,给客户端以回应,并将客户端的输入内容与服务端的输出内容、时间保存到文本文件中
3.要求服务器端可以实现同时与多个客户端进行通信,与每一个客户端通信的内容,保存为一个“学号_ip.txt”的文件
4..提交文件结果包括:代码,通信后生成的txt文件
设计思路
我所作答的题目是张三和李四使用用户数据报文相互发送和接受数据包,程序运行时,一方所在的主机在命令行输入数据发送给另一方所在的主机,显示。首先用DatagramSocket的另一个构造方法DatagramSocket(int port)创建一个对象,其中的参数和待接收的数据包端口号相同,对象mail_in使用方法receive(DatagramSocket)接受数据包。
运用知识点
套接字,UDP通信,使用DatagramSocket()方法构建对象
代码片段
(顺序为:客户端,服务器)
import java.net.*;import java.util.*; public class Client_Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner=new Scanner(System.in); Thread readData; ReceiveLetterForC receive=new ReceiveLetterForC(); try{ readData=new Thread(receive); readData.start(); byte [] buffer=new byte [1]; InetAddress address=InetAddress.getByName("10.43.11.91"); DatagramPacket dataPack= new DatagramPacket(buffer,buffer.length,address,888); DatagramSocket postman=new DatagramSocket(); System.out.print("输入法送给服务器的消息:"); while(scanner.hasNext()){ String mess=scanner.nextLine(); buffer=mess.getBytes(); if(mess.length()==0) System.exit(0); buffer=mess.getBytes(); dataPack.setData(buffer); postman.send(dataPack); System.out.print("继续输入法送给服务器的消息:"); } } catch (Exception e){ System.out.println(e); } } }
import java.net.*; public class ReceiveLetterForC implements Runnable{ public void run(){ DatagramPacket pack=null; DatagramSocket postman=null; byte data[]=new byte[8192]; try{ pack=new DatagramPacket(data,data.length); postman=new DatagramSocket(666); } catch(Exception e){} while(true){ if(postman==null) break; else try{ postman.receive(pack); String message=new String (pack.getData(),0,pack.getLength()); System.out.println("յ"+message); } catch(Exception e){} } } }
import java.net.*;import java.util.*;//import java.io.*;public class Server_Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner=new Scanner(System.in); Thread readData; ReceiveLetterForS receive=new ReceiveLetterForS(); try{ readData=new Thread(receive); readData.start(); byte [] buffer=new byte [1]; InetAddress address=InetAddress.getByName("10.43.11.91"); DatagramPacket dataPack= new DatagramPacket(buffer,buffer.length,address,888); DatagramSocket postman=new DatagramSocket(); System.out.print("输入法送给客户端的消息:"); while(scanner.hasNext()){ String mess=scanner.nextLine(); buffer=mess.getBytes(); if(mess.length()==0) System.exit(0); buffer=mess.getBytes(); dataPack.setData(buffer); postman.send(dataPack); System.out.print("继续输入法送给客户端的消息:"); } } catch (Exception e){ System.out.println(e); } } }
import java.net.*;public class ReceiveLetterForS implements Runnable{ public void run(){ DatagramPacket pack=null; DatagramSocket postman=null; byte data[]=new byte[8192]; try{ pack=new DatagramPacket(data,data.length); postman=new DatagramSocket(666); } catch(Exception e){} while(true){ if(postman==null) break; else try{ postman.receive(pack); String message=new String (pack.getData(),0,pack.getLength()); System.out.println("յ"+message); } catch(Exception e){} } } }
结果显示
总结
这次考核给我的感悟挺深的,因为,可能是因为间隔上次敲代码的时间较长,浪费在专注敲代码的时间很久,最后做完感觉还缺点什么,由于自己电脑的一些小毛病,练习显得很紧缺,但是我现在才发现,练习的重要性,哪里有什么捷径可以走,都是脚踏实地的练习。我很喜欢Java,但是就我现在的水平来说根本不够,希望以后继续努力,不在耍小聪明,自己一步步坚持。扎实真的很重要!书本原来那么的重要!加油!
课堂练习码云地址
https://gitee.com/girlchujiu/fourth_assessment/tree/master