码云地址:https://gitee.com/bubblerui/fourth_process_assessment/tree/master
第四次过程性考核内容:
使用套接写连接编写一个简单的聊天室程序,客户端主函数放在Client_Main.java文件中,服务器端主函数放在Server_Main.java文件中
要求:
1.客户端从控制台进行输入,并将客户端的输出内容和时间保存到“学号.txt”文件中
2.服务器端读取到客户端的程序后,给客户端以回应,并将客户端的输入内容与服务端的输出内容、时间保存到文本文件中
3.要求服务器端可以实现同时与多个客户端进行通信,与每一个客户端通信的内容,保存为一个“学号_ip.txt”的文件
4..提交文件结果包括:代码,通信后生成的txt文件
基本步骤:
1,服务端创建ServerSocket绑定端口号,循环调用accept()方法
·2,客户端创建一个socket并请求和服务器端连接
3,服务器端接受客户端请求,创建socket与该客户建立连接
4,两个socket在一个单独的线程上通话
5,服务器端继续等待新的连接
客户机代码:
import java.io.File; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class Client_Main{ private PrintWriter writer; Socket socket; private void client() { System.out.println("尝试连接\n"); File file =new File("16012019.txt"); try { socket = new Socket("10.43.11.121", 8080); writer = new PrintWriter(socket.getOutputStream(), true); System.out.println("完成连接"); Scanner sc=new Scanner(socket.getInputStream()); System.out.println(sc.nextLine()); System.out.println("我(客户机):"); Scanner sc1=new Scanner(System.in); while(true){ String data=sc1.nextLine(); writer.println(data); writer.flush(); String data1=sc.nextLine(); System.out.println("服务机:"+data1); System.out.println("我(客户机):"); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Client_Main clien = new Client_Main(); clien.client(); } }
服务器代码:
import java.io.File; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class Server_main{ private PrintWriter writer; private ServerSocket server; private Socket socket; void serve() { try { server = new ServerSocket(8080); System.out.println("服务器套接字已经创建成功"); while (true) { System.out.println("等待客户机的连接......."); socket = server.accept(); writer = new PrintWriter(socket.getOutputStream(), true); writer.println("您已成功连接到远程服务器!"+"/"+"有什么可以帮你的吗?"); writer.flush(); Scanner sc=new Scanner(System.in); Scanner sc1=new Scanner(socket.getInputStream()); while(true){ String data = sc1.nextLine(); System.out.println("客户机:"+data); System.out.print("我(服务机):"); String data1 = sc.nextLine(); writer.println(data1); writer.flush(); Scanner write=new Scanner(System.in); int ip =write.nextByte(); File file =new File("16012019_ip.txt"); } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Server_main tcp = new Server_main(); tcp.serve(); }
此次代码没有很好的完成的多线程任务,所以没有运行结果。
在编写代码中不能很好的掌握多线程的相关代码 thread类和run方法也没有很好的使用。