第四次过程性考核
第四次过程性考核
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 |