第四次过程性考核
考核内容:
*160121
使用套接写连接编写一个简单的聊天室程序,客户端主函数放在Client_Main.java文件中,服务器端主函数放在Server_Main.java文件中
要求:
- 1.客户端从控制台进行输入,并将自己的输出内容和时间保存到数据库的“client_学号”表中
- 2.服务器端读取到客户端的程序后,从控制台进行输入给客户端以回应,并将客户端的输入内容与服务端的输出内容、时间保存到数据库的表中
- 3.要求服务器端可以实现同时与多个客户端进行通信,与每一个客户端通信的内容,保存为一个"ip_学号"的表
- 4.提交文件结果包括:代码,数据库导出为.sql文件
服务器端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import java.io.*; import java.net.*; public class Server_Main { public static void main (String args []) { String [] answer = { "我收到你的程序了" , "我要把你的输入内容我的输出内容还有时间保存到数据库中" }; ServerSocket serverForClient_Main = null ; Socket socketOnServer = null ; DataOutputStream out = null ; DataInputStream in = null ; try { serverForClient_Main = new ServerSocket( 2010 ); } catch (IOException el) { System.out.println(el); } try { System.out.println( "等待客户呼叫" ); socketOnServer = serverForClient_Main.accept(); out = new DataOutputStream(socketOnServer.getOutputStream()); in = new DataInputStream(socketOnServer.getInputStream()); for ( int i= 0 ;i<answer.length;i++){ String s = in.readUTF(); System.out.println( "服务器收到客户的提问:" +s); out.writeUTF(answer[i]); Thread.sleep( 500 ); } } catch (Exception e) { System.out.println( "客户已断开" +e); } } } |
客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import java.io.*; import java.net.*; import java.sql.*; public class Client_Main{ public static void main (String args[ ]) { String [] mess={ "请输入内容和时间,我会保存到'client_学号'表中" , "好的请保存" }; Socket mysocket; DataInputStream in= null ; DataOutputStream out= null ; Connection con = null ; Statement sta = null ; ResultSet rs; String SQL; try { class .forName( "org.apache.derby.jdbc.EmbeddedDriver" ); } catch (Exception e) { } try { String url = "jdbc:derby:client_学号;create=true" ; con=DriverManager.getConnection(uri); sta.execute(SQL); } SQL= "insert into ip_学号 values" + try { mysocket = new Socket( "127.0.0.1" , 2010 ); in = new DataInputStream(mysocket.getInputStream()); out = new DataOutputStream(mysocket.getOutputStream()); for ( int i= 0 ;i<mess.length;i++) { out.writeUTF(mess[i]); String s =in.readUTF(); System.out.println( "客户收到服务器的回答:" +s); Thread.sleep( 500 ); } } catch (Exception e) { System.out.println( "服务器已断开" +e); } } } |
考试提交的结果是上面这个,参考的是书上那个客户与服务器互答,但是能力有限服务器端还有问题,参考了别的同学的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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(); /*String jilu="(mess,null)"; String sqlStr="insert into mess values"+jilu;*/ 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); } /*try{ sql=con.createStatement(); int ok=sql.executeUpdate(sqlStr); rs=sql.executeQuery("select * from client_学号"); while(rs.next()){ String mess=rs.getString(1); String time=rs.getString(2); System.out.print(mess); System.out.print(time); } con.close(); } catch(SQLException e){ System.out.println(e); }*/ } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
import java.net.*; import java.util.*; import java.sql.*; public class Server_Main { public static void main(String[] args) { /*Connection con=null; Statement sql; ResultSet rs; con =GetDBConnection.connectDB("students","root","111111"); if (con==null)return;*/ 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(); /*String jilu="(mess,null)"; String sqlStr="insert into mess values"+jilu;*/ 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); } /*try{ sql=con.createStatement(); int ok=sql.executeUpdate(sqlStr); rs=sql.executeQuery("select * from client_学号"); while(rs.next()){ String mess=rs.getString(1); String time=rs.getString(2); System.out.print(mess); System.out.print(time); } con.close(); } catch(SQLException e){ System.out.println(e); }*/ } } |
实现数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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){} } } } } |
总结:
本次java考核到此结束了,也没有给个完整的结局,主要是自己没认真学,学的不精,导致后面搞不太懂。以后会努力复习一下。