第四次过程性考核

码云地址:https://gitee.com/iseekun99/fourth

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

要求: 

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

多线程机制

实现一个服务器同时与多个客户端进行简单的通信

客户端主函数:

import java.io.*;
import java.net.*;
import java.util.*;public class Client_Main{
    public static void main(String args[]){
        Socket mysocket;
        DataInputStream in = null;
        DataOutputStream out = null;
        try{
            mysocket= new Socket("127.0.0.1",2010);
            in=new DataInputStream(mysocket.getInputStream());
            out=new DataOutputStream(mysocket.getOutputStream());
            for(int i = 0;i<100;i++){
                Scanner scanner = new Scanner(System.in);
                String source= scanner.nextLine();
                out.writeUTF(source);
                String s=in.readUTF();
                System.out.println("客户收到服务器的回答:"+s);
                Thread.sleep(500);
            }
        }
        catch(Exception e){System.out.println("服务器已断开"+e);}
  }
}

服务器端猪函数:服务器端需要开启多个线程用来与每一个客户端进行通信

import java.io.*;
import java.net.*;
import java.util.*;public class Server_Main{
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        ServerSocket server=null;
        ServerThread thread;
        Socket socketOnServer=null;
        while(true){
        try{ server= new ServerSocket(2010);}
        catch(IOException e1){ System.out.println("正在监听");}
        try{
            System.out.println("等待客户呼叫");
            socketOnServer = server.accept();
            System.out.println("客户的地址:"+socketOnServer.getInetAddress());}
        catch(Exception e){System.out.println("客户已断开"+e);}
        if(socketOnServer!=null){new ServerThread(socketOnServer).start();}    
    }
}
}
class ServerThread extends Thread{
    Scanner scanner=new Scanner(System.in);
    Socket socketOnServer;
    DataOutputStream out=null;
    DataInputStream in=null;
    String s=null;
    ServerThread(Socket t){
    socketOnServer =t;
    try {
        System.out.println("等待客户呼叫");
        out=new DataOutputStream(socketOnServer.getOutputStream());
        in=new DataInputStream(socketOnServer.getInputStream());
        for(int i=0;i<100;i++){
                String s=in.readUTF();
                System.out.println("服务器收到客户的提问:"+s);
                out.writeUTF(scanner.nextLine());
        }
    }
    catch(Exception e){System.out.println("服务器已断开"+e);}
    }

}

建一个简单的数据库表,来保存客户端、服务器端的通信内容与时间,创建了一个sql表

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("com.mysql.jdbc.Driver");
}
catch(Exception e){}
try{
con=DriverManager.getConnection(uri,id,p);
}
catch(SQLException e) {}
return con;
}

}

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(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.print("收到:"+message);
                }
                catch(Exception 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(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.print("收到:"+message);
                }
                catch(Exception e){}
            }
        }
    }

 

 

运行结果如下: 可以与多个客户端进行简单的通信聊天

 

近期总结:对一个简单程序设计的整个框架有了大致的了解,在对各种方法的实际运用操作中还是存在很多问题。

posted @ 2018-12-12 10:40  huwyuan  阅读(180)  评论(4编辑  收藏  举报