第四次过程性考核

                              第四次过程性考核

 https://gitee.com/yzyal/projects

 

实训要求:

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

要求: 

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

 

一、实现客户端与服务器的多线程通信

(1)服务器端

 1 import java.util.*;
 2 import java.io.*;
 3 import java.net.*;
 4 public class Server_Main
 5 {
 6     public static void main(String args[])
 7     {
 8     Scanner scanner = new Scanner(System.in);
 9     ServerSocket server = null;
10     ServerThread thread;
11     Socket kehu = null;
12     while (true){
13     try {
14     server = new ServerSocket(2010);
15     }
16     catch(IOException e1){
17         System.out.println("正在监听");
18     }
19     try {
20         System.out.println("等待客户呼叫");
21 
22         kehu = server.accept();
23         System.out.println("客户地址:"+kehu.getInetAddress());
24 
25     }
26     catch (Exception e)
27     {
28         System.out.println("正在等待客户"+e);
29     }
30     if (kehu !=null){
31     new ServerThread(kehu).start(); }
32    }
33   }
34 }
35 class ServerThread extends Thread{
36     Scanner scanner = new Scanner(System.in);
37     Socket socket;
38     DataOutputStream out=null;
39     DataInputStream in=null;
40     String s = null;
41     ServerThread(Socket t)
42     {
43         socket = t;
44         try
45         {
46             out = new DataOutputStream(socket.getOutputStream());
47             in = new DataInputStream(socket.getInputStream());
48             for(int i=0;i<10;i++)
49         {
50             String s=in.readUTF(); 
51             System.out.println("服务器收到客户提问:"+s);
52             out.writeUTF(scanner.nextLine());
53         
54         }
55         }
56         catch (IOException e){}
57     }
58     
59 }

(2)客户端

 1 import java.io.*;
 2 import java.net.*;
 3 import java.util.*;
 4 public class Client_Main
 5 {
 6     public static void main (String args[])
 7     {
 8         Socket mysocket;
 9         DataInputStream in=null;
10         DataOutputStream out=null;
11         try
12         {
13             mysocket = new Socket("127.0.0.1",2010);
14             in = new DataInputStream(mysocket.getInputStream());
15             out = new DataOutputStream(mysocket.getOutputStream());
16             for (int i=0;i<10;i++)
17             {
18                 Scanner scanner = new Scanner(System.in);    
19                 String source = scanner.nextLine();
20                 out.writeUTF(source);
21                 String s= in.readUTF();
22                 System.out.println("客户收到服务器的回答:"+s);
23                 Thread.sleep(500);
24             }
25         }
26         catch(Exception e)
27         {
28             System.out.println("服务器已断开"+e);
29         }
30     }
31 }

(3)运行结果

服务器端

客户端

(4)第一部分小结

 在实现基本通信的基础上,可以实现多个客户与服务器进行通信,但是前提是要服务器结束与当前客户的通信,才能开始与下一

个客户的通信。

具体怎样可以实现还没有做出来,但是有点小想法,也许端口可以发挥点作用,但具体的实施还没有想出来。我所能做到的是能有多个窗口通信,

而且也可以显示自己的IP地址。

 

二、数据库部分

 (1)数据库建表

 1      Connection con=null;
 2         Statement sql;
 3         ResultSet rs;
 4         try{ Class.forName("com.mysql.kdbc.Driver");
 5         }
 6         catch(Exception e){}
 7         String uri="jdbc:mysql://localhost:3306/client?useSSL=true";
 8         String user="root";
 9         String password="111111";
10         try{con = DriverManager.getConnection(uri,user,password);}
11         catch(SQLException e){}
12         String jilu="";
13         String sqlStr = ""+jilu;
14         try{
15             sql=con.createStatement();
16             rs=sql.executeQuery("SELECT bir FROM mess WHERE Number=1001");
17             while(rs.next()){
18                 String number=rs.getString(1);
19                 //String name=rs.getString(2);
20                 //Date date=rs.getDate(3);
21                 //float height=rs.getFloat(4);
22                 System.out.print(number);
23                 //System.out.print(name);
24                 //System.out.print(date);
25                 //System.out.print(height);
26             }
27             con.close();
28             
29         }
30         catch(SQLException e){
31             System.out.println(e);
32         }

(2)第二部分小结

在数据库这边遇到了很多问题,比如不知道如何正确的将客户与服务器随机的对话传到数据库当中,插入命令大致都会,可是和服务器一连接就觉得

很难,不知道该如何做。还需要思考和实践。

 

第四次考核小结

本次考核的内容是:线程,网络编程,数据库。

针对这次考核,发现了很多问题,对于知识点的掌握,平时练习的程度,还有独立思考的能力都很欠缺,目前来看,对于整个Java编程有整体的一个框架,但是没有清晰地编程思路,

在考核中发现的问题以及未解答的疑问我会在课后慢慢复习,和室友一起讨论。

 

  代码数 博客字数
网络编程 140 100
数据库 89 100

 

 

   

posted on 2018-12-13 13:55  艾璐  阅读(152)  评论(0编辑  收藏  举报