【C/S】

import java.net.*;
import java.io.*;
import java.util.*;
public class TestServer01{// 服务器端 -- 接收一行内容
	static Set<String> ipSet = new HashSet<>();				//静态的set集合 哈希Set
	public static void main(String[] args)throws Exception{ //Socket  英语:袜子 可以理解为电话线
		ServerSocket server = new ServerSocket(12666);		//创建Socket服务 并且指定 端口号 相当于门牌号
		boolean isRunning = true;							//标识符 控制while循环;写true的话是死循环,系统编译不通过,这样骗过系统,才能执行下面的关闭操作
		while(isRunning){									//while循环
			Socket skt = server.accept();					//接收Socket服务:accept()方法 -- 大堂经理
			ServerThread st = new ServerThread(skt);		//大堂经理招呼一个 服务员(线程) 去服务来的客人,然后大堂经理继续在大厅迎客
			st.start();										//服务员开始服务
		}
		server.close();										//关闭Socket服务
	}
}
class ServerThread extends Thread{							//创建线性的第一种方式 相当于学生类
	Socket skt;					  							//创建 Socket属性 相当于学生姓名
	public ServerThread(Socket skt){						//创建构造方法 知道为哪个Socket服务 听哪一个大堂经理的
		this.skt = skt;
	}
	@Override
	public void run(){
		try{												//抛异常try catch
			InputStream is = skt.getInputStream();			//通过Socket获得输入流 getInputStream() 不是new!!!
			InputStreamReader r = new InputStreamReader(is);//桥转换器:字节 -》字符
			BufferedReader br = new BufferedReader(r);		//BufferedReader
			String str = br.readLine();						//读取一行
			String ip = skt.getInetAddress().toString();	//获取ip地址并转成字符串
			TestServer01.ipSet.add(ip);						//将ip添加到set集合
			System.out.println(ip+ " : " + str + "    "+TestServer01.ipSet.size() + "/55");//输出ip和内容
			br.close();										//关BufferedReader
			skt.close();									//关Socket
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
import java.net.*;
import java.io.*;
import java.util.concurrent.*;
public class TestServer02{ // 服务器端 -- 提供图片下载
	public static void main(String[] args)throws Exception{
		ExecutorService es = Executors.newCachedThreadPool();//创建带缓存机制的线程池 -- 执行器工具类.缓冲机制线程池
		ServerSocket server = new ServerSocket(12345);		 //创建Socket服务 ServerSocket,指定端口号 -- 门牌号
		boolean isRunning = true;							 //设置循环控制变量,避免死循环无法执行之后的关闭操作
		while(isRunning){									 //while循环
			Socket skt = server.accept();					 //接收Socket服务accept()方法 -- 大堂经理
			EtoakThread et = new EtoakThread(skt);			 //大堂经理招呼 服务员--线程 服务来的客人
			es.submit(et);									 //服务员开始服务
		}
		server.close();										 //关闭Socket服务
		es.shutdown();										 //关闭执行器
	}
}
class EtoakThread implements Callable<String>{				 //创建线程的第三种方式
	Socket skt;												 //创建Socket属性 相当于学生姓名
	public EtoakThread(Socket skt){							 //构造方法:知道为哪个Socket服务
		this.skt = skt;
	}
	@Override
	public String call()throws Exception{					 //覆盖call()方法 有返回值 且 能抛异常
		FileInputStream fis = new FileInputStream("jay.jpg");//创建输入流对象 new
		OutputStream os = skt.getOutputStream();			 //通过Socket获得输出流
		byte[] data = new byte[65536];						 //配合数组完成写出
		int len;											 //规定写出长度
		while((len = fis.read(data))!=-1){					 //while循环:输入流读不到-1则继续执行
			os.write(data,0,len);							 //输出流写出
		}
		os.close();											 //关输出流
		fis.close();										 //关输入流
		skt.close();										 //关Socket
		System.out.println(skt.getInetAddress() + "下载完毕");//提示某个ip下载完成
		return "ETOAK";										  //返回一个字符串
	}
}
import java.net.*;
import java.io.*;
import java.util.concurrent.*;

public class TestServer03{ // 服务器端 -- 接收客户端发来的内容 返回相应指定的内容
	public static void main(String[] args)throws Exception{
		ExecutorService es = Executors.newFixedThreadPool(5); //创建可修复的线程池 执行器类.可修复线程池
		ServerSocket server = new ServerSocket(12000);		  //创建Socket服务 且指定端口号 -- 门牌号
		boolean isRunning = true;							  //设置循环变量控制变量 避免死循环无法执行之后的关闭操作
		while(isRunning){									  //while循环
			Socket skt = server.accept();					  //接收Socket服务accept()方法 -- 大堂经理
			ServerThread st = new ServerThread(skt);		  //大堂经理招呼 服务员--线程 服务来的客人
			es.submit(st);									  //开始服务
		}
		server.close();										  //关闭Socket服务
		es.shutdown();										  //关闭执行器
	}

}
class ServerThread implements Runnable{						 //创建线程的第二种方式
	Socket skt;												 //创建Socket属性 相当于学生姓名
	public ServerThread(Socket skt){						 //构造方法:知道为哪个Socket服务
		this.skt = skt;
	}
	@Override
	public void run(){										 //覆盖run()方法
		try{												 //try catch处理异常
			//1.接
			InputStream is = skt.getInputStream();			 //通过Socket获得输入流
			InputStreamReader r = new InputStreamReader(is); //桥转换器 字节 -》字符
			BufferedReader br = new BufferedReader(r);		 //BufferedReader
			String name = br.readLine();					 //读一行

			//2.化
			String result = X.get(name);					 //类名.get() 获得内容

			//3.发
			OutputStream os = skt.getOutputStream();		 //通过Socket获得输出流
			PrintWriter pw = new PrintWriter(os,true);		 //PrintWriter 且 清空缓冲
			pw.println(result);								 //输出 所获得的内容
			pw.close();										 //关闭PrintWriter
			br.close();										 //关闭BufferedReader
			skt.close();									 //关闭Socket
			System.out.println(skt.getInetAddress() + " : " + name + " -> "+result);//打印哪个ip 输入的名字 的结果

		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

class X{
	public static String get(String name){					//静态get(String)
		if(name.contains("吴") || name.contains("老大") )   //判断是否包含特定字
			return "天机不可泄露";							//结束方法 返回指定内容

		String[] data = {"去陪凢凢","命运多舛","平平淡淡","大富大贵","天命之子"};//String[] 装命运的五种描述

		int x = name.hashCode()*17/3-1;						//获得名字的hashCode()
		long time = System.currentTimeMillis() / (24L*60*60*1000);//获得当前时间的整天数
		x += time*53/29;									//由名字的hashCode()和时间决定的一个值
		x = Math.abs(x);									//绝对值
		x = x % data.length;								//对数组的长度取模获取下标

		return data[x];										//返回数组
	}
}
import java.io.*;
import java.net.*;
import javax.swing.*;
public class TestClient01{
	public static void main(String[] args)throws Exception{
		while(true){
			String str = JOptionPane.showInputDialog(null,"请输入内容:");
			if("88".equals(str)){
				break;
			}
			Socket skt = new Socket("192.168.31.85",12666);
			OutputStream os = skt.getOutputStream();
			OutputStreamWriter w = new OutputStreamWriter(os,"GBK");
			PrintWriter pw = new PrintWriter(w,true);
			pw.println(str);
			pw.close();
			skt.close();
		}
	}
}
import java.net.*;
import java.io.*;
public class TestClient02{
	public static void main(String[] args)throws Exception{
		Socket skt = new Socket("192.168.31.85",12345);
		InputStream is = skt.getInputStream();
		FileOutputStream fos = new FileOutputStream("ok.jpg");
		byte[] data = new byte[65536];
		int len;
		while((len = is.read(data))!=-1){
			fos.write(data,0,len);
		}
		fos.close();
		is.close();
		skt.close();
	}
}
import java.net.*;
import java.io.*;
public class TestClient03{
	public static void main(String[] args)throws Exception{
		Socket skt = new Socket("192.168.31.85",12000);
		OutputStream os = skt.getOutputStream();
		PrintWriter pw = new PrintWriter(os,true);
		pw.println("张总");

		InputStream is = skt.getInputStream();
		InputStreamReader r = new InputStreamReader(is);
		BufferedReader br = new BufferedReader(r);
		String result = br.readLine();

		br.close();
		pw.close();
		skt.close();
		System.out.println(result);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值