码迷,mamicode.com
首页 > 其他好文 > 详细

第四次过程性考核

时间:2018-12-15 00:21:32      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:==   举例   使用   tap   ORC   服务端   读取   height   bytes   

码云地址:https://gitee.com/shikexin/16012018_shi_kexin_examination/tree/master

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

要求: 

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

客户端:

import java.net.*;
import java.util.*;

public class Client_Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		Thread readData;
		ReceiveLetterForC receive=new ReceiveLetterForC();
		try{
			readData=new Thread(receive);
			readData.start();
			byte [] buffer=new byte [1];
			InetAddress address=InetAddress.getByName("10.43.11.91");
			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();
				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);
		}

	}

}

  

import java.net.*;

public class ReceiveLetterForC 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.println("?"+message);
				}
			catch(Exception e){}
		}
	}

}

  

服务器:

import java.net.*;
import java.util.*;
//import java.io.*;
public class Server_Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		Thread readData;
		ReceiveLetterForS receive=new ReceiveLetterForS();
		try{
			readData=new Thread(receive);
			readData.start();
			byte [] buffer=new byte [1];
			InetAddress address=InetAddress.getByName("10.43.11.91");
			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();
				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);
		}

	}

}

  

import java.net.*;
public class ReceiveLetterForS 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.println("?"+message);
				}
			catch(Exception e){}
		}
	}

}

解题思路:使用套接字,UDP通信,使用DatagramSocket()方法构建对象

运行结果:

技术分享图片

总结:问题是收不到消息,考核快结束,发现418页可以作为参考应用举例,这道题有点难,光靠课上学的知识真的不足以做出这道题,学到的知识也不是很扎实,课后也没有做练习,导致考核没有做出来,书翻得还不够多,java需要学习的地方还有很多,学无止境啊

 

学习内容 代码行数 博客字数
第四次过程性考核 120 150

第四次过程性考核

标签:==   举例   使用   tap   ORC   服务端   读取   height   bytes   

原文地址:https://www.cnblogs.com/shikexin/p/10122208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!