考核内容:
*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考核到此结束了,也没有给个完整的结局,主要是自己没认真学,学的不精,导致后面搞不太懂。以后会努力复习一下。