代码改变世界

第四次过程性考核

2018-12-13 15:47  wxl!  阅读(162)  评论(2编辑  收藏  举报
  • 实训要求:

      使用套接写连接编写一个简单的聊天室程序,客户端主函数放在Client_Main.java文件中,服务器端主函数放在Server_Main.java文件中

要求: 

  • 1.客户端从控制台进行输入,并将自己的输出内容和时间保存到数据库的“client_学号”表中
  • 2.服务器端读取到客户端的程序后,从控制台进行输入给客户端以回应,并将客户端的输入内容与服务端的输出内容、时间保存到数据库的表中
  • 3.要求服务器端可以实现同时与多个客户端进行通信,与每一个客户端通信的内容,保存为一个"ip_学号"的表
  • 4.提交文件结果包括:代码,数据库导出为.sql文件

    原理:基于TCP的单线程通信任务的基础上,换成UDP多线程的.

    观点:单线程是基于IP地址,所以是唯一的。问了同学,知道了多线程应该基于端口

   https://gitee.com/wxl19981225/fourth_process_assessment/tree/master

client:

import java.net.*;

import java.util.*;

public class Client_Main {

 public static void main(String[] args) {     

Scanner scanner=new Scanner(System.in);  

 Thread readData;

  ReceiveLetterForServer receiver=new ReceiveLetterForServer();  

 try{    readData =new Thread(receiver);  

  readData.start();   

 byte [] buffer=new byte[1];

   InetAddress address=InetAddress.getByName("127.0.0.1");

   DatagramPacket dataPack=new DatagramPacket(buffer,buffer.length,address,666);

   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);   }

    }

}

 

 ReceiveLetterForClient.java:

import java.net.*;
public class ReceiveLetterForClient 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.printf("%25s\n","收到:"+message);
    }
    catch(Exception e){}
   }
  }
 }
}

 

 

 server:

import java.net.*;

import java.util.*;

import java.sql.*;

public class Server_Main {

 public static void main(String[] args) {
 Scanner scanner=new Scanner(System.in);

  Thread readData;

  ReceiveLetterForClient receiver=new ReceiveLetterForClient();

  try{    readData =new Thread(receiver);

   readData.start(); 

  byte [] buffer=new byte[1];    

InetAddress address=InetAddress.getByName("127.0.0.1");  

  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);   }

    }

}

 ReceiveLetterForServer.java:

import java.net.*;
public class ReceiveLetterForServer 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(888);
  }
  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.printf("%25s\n","收到:"+message);
    }
    catch(Exception e){}
   }
  }
 }
}

 

 

数据库连接:

import java.sql.*;

public class GetDBConnection{  

public static Connection connectDB(String DBName,String id,String p){

  Connection con=null;

  String uri="jdbc:mysql://localhost:3306/"+DBName+"?useSSL=true&characterEncoding=utf-8";  

 try{    Class.forName("");   }   

catch(Exception e){}

  try{    con=DriverManager.getConnection(uri,id,p);   }  

 catch(SQLException e){}   return con;  }

}

 

运行结果:

总结:

       本节课知识点掌握情况非常不好,无法正确掌握并运用。题做的也不完善,课后复习不够,我努力完善,想要做到更好,结果却差强人意。只能完成一个客户端和一个服务器进行通信。总的来说不能将知识点正确整合在一起,和书上

代码大致一样,我知道这次实验做的非常不好,我会反思我自己。希望以后查漏补缺,做得更好一点!

学习内容 代码行数 博客字数
第四次过程性考核 200 200