栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java程序猿必学第二十二篇—— 网络编程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java程序猿必学第二十二篇—— 网络编程

//1.File相关
//1.1 FileFilter
//FileFilter:文件过滤器
//listFiles方法用于将当前层的文件和目录的File对象放入数组
//FileFilter则是在放入过程中的过滤
//案例:在指定的a目录下,查找当前层txt为后缀的文件
//分析:1.后缀为txt;2.是文件
//具体操作:实例化a目录的对象;取出下面的文件和目录;再进行判断
public class Test1 {
	public static void main(String[] args) {
		File file = new File("a");
		File[] files = file.listFiles(new FileFilter() {
			@Override
			public boolean accept(File pathname) {
				//如果为true,则放行;false就拦截
				return pathname.isFile()&&pathname.getName().endsWith(".txt");
				
			}
		});
		System.out.println(Arrays.toString(files));
	}
}


//1.2.Properties集合
//Properties:Map的子类,用于存储键值对
//存储键值对都是字符串类型
//与IO流有关,可以将文件的内容加载的Properties;也可以将Properties内容存储到文件
public class Test2 {
	public static void main(String[] args) throws FileNotFoundException, IOException {
		Properties properties = new Properties();
		properties.put("aaa", "12344");
		properties.put("bbb", "65555");
		properties.put("ccc", "76666");
		
		//存储
		properties.store(new FileOutputStream("a.txt"), "store");
		
		Properties p = new Properties();
		//加载文件的键值对
		p.load(new FileInputStream("a.txt"));
		//p.getProperty(key):根据key,获取value,都是字符串类型
		System.out.println(p);
	}
}


 

//2.3 网络编程三要素(重点)
 


//3. 网络编程
//3.1 INetAddress类(了解)
//INetAddress类: 代表IP地址对象的类
//可以调用相关方法得到IP地址
public class Test1 {
	public static void main(String[] args) throws UnknownHostException {
		//通过ip或主机名或域名得到ip对象
		InetAddress net1 = InetAddress.getByName("192.168.1.8");
		System.out.println(net1);
		
		//一个域名可能绑定多台服务器(多个IP)
		InetAddress[] nets = InetAddress.getAllByName("www.baidu.com");
		System.out.println(Arrays.toString(nets));
		
		InetAddress net2 = InetAddress.getLocalHost();
		System.out.println(net2);  //获取本机IP
		
	}
}


//3.2 TCP-客户端发数据到服务器(重点)
//TCP编程:也叫做Socket编程,基于tcp协议的字节流的传输协议
//通讯模型: 客户端-服务器模型
//服务器:
//1.实例化服务器Socket对象,指定自身端口
//2.监听客户端的连接,如果有客户端连接了,那么创建一个socket与客户端通讯

//客户端:
//1.实例化socket对象,传入服务器的ip和端口

//谁先启动?  服务器先启动,有监听阻塞方法

//案例:服务器与客户端建立TCP连接后,进行通讯;客户端给服务器发数据


//-----Server-------
//TCP编程:也叫做Socket编程,基于tcp协议的字节流的传输协议
//通讯模型: 客户端-服务器模型
//服务器:
//1.实例化服务器Socket对象,指定自身端口
//2.监听客户端的连接,如果有客户端连接了,那么创建一个socket与客户端通讯

//客户端:
//1.实例化socket对象,传入服务器的ip和端口

//谁先启动?  服务器先启动,有监听阻塞方法

//案例:服务器与客户端建立TCP连接后,进行通讯;
//客户端给服务器发数据,服务器也可以给客户端发数据

public class Server {
	public static void main(String[] args) throws IOException {
		//实例化服务器socket,指定自身端口
		ServerSocket serverSocket = new ServerSocket(9527);
		//调用accept监听客户端连接,如果有客户端连接了,则创建了socket对象与客户端通讯
		Socket socket = serverSocket.accept();  //阻塞方法
		System.out.println("有一个客户端连上来了");
		
		//接收数据--读
		InputStream is = socket.getInputStream();
		byte[] b = new byte[1024];
		int len = is.read(b);
		System.out.println(new String(b, 0,len));
		
		
		//服务器发送数据--写
		OutputStream os = socket.getOutputStream();
		os.write("服务器回应给客户端的数据".getBytes());
	
		IOUtils.closeAll(is,os,socket,serverSocket);
	}
}


//-----Client-------
public class Client {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("127.0.0.1", 9527);
		
		//通过字节流发数据--写
		OutputStream os = socket.getOutputStream();
		os.write("客户端发送的数据..".getBytes());
		
		//客户端的接收--读
		InputStream is = socket.getInputStream();
		byte[] b = new byte[1024];
		int len = is.read(b);
		System.out.println(new String(b, 0,len));
		
		//统一资源关闭: 先关小的,再关大的
		IOUtils.closeAll(os,is,socket);
	}
}

 

 




//3.3 客户端上传图片到服务器

//案例:使用tcp编程实现图片上传到服务器
//分析:先在客户端通过输入字节流读取图片资源,然后写到socket中
     //在服务器的socket中通过读字节流接收,然后再写到服务器本地
//-------Server--------
public class Server {
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(10086);
		Socket socket = ss.accept();
		
		//从socket中读取字节流
		InputStream is = socket.getInputStream();
		FileOutputStream fos = new FileOutputStream("d:\a.jpg");
		byte[] b = new byte[1024];
		int len;
		while((len=is.read(b))!=-1) {
			fos.write(b, 0, len);
		}
		System.out.println("服务器接收成功~!");
		IOUtils.closeAll(fos,is,socket,ss);
	}
}


//-------Client--------
public class Client {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("127.0.0.1", 10086);
		
		//客户端从图片中读取资源
		FileInputStream fis = new FileInputStream("b.jpg");
		byte[] b = new byte[1024];
		int len;
		OutputStream os = socket.getOutputStream();
		while((len=fis.read(b))!=-1) {
			os.write(b, 0, len);
		}
		System.out.println("上传到服务器~~");
		IOUtils.closeAll(os,fis,socket);
		
	}
}




//3.4 多个客户端发数据给服务器

//案例:多个客户端与服务器聊天
//服务器:
//1.来一个客户端,那么产生一个socket与客户端通讯---多线程
//2.从socket总接收文本内容,通过字符缓冲流封装

//客户端:
//1.循环从客户端录入数据

//------服务器------
public class Server {
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(10010);
		//死循环实时监听客户端连接
		while(true) {
			Socket socket = ss.accept();
			System.out.println("有一个客户端进行了连接...");
			new ServerThread(socket).start();//在开辟的路径中,执行socket操作
		}
	}
}


//------服务器线程------
public class ServerThread extends Thread {
	private Socket socket;
	
	public ServerThread(Socket socket) {
		this.socket = socket;
	}
	
	@Override
	public void run() {
		InputStream is = null;
		BufferedReader br = null;
		try {
			is = socket.getInputStream();
			br = new BufferedReader(new InputStreamReader(is));
			while(true) {
				String msg = br.readLine();
				System.out.println(msg);
				
				if(msg.equals("886")) {
					break;
				}
			}
		} catch (IOException e) {
			System.out.println("有异常中断。。。");
		}finally {
			System.out.println("有一个客户端退出了连接");
			IOUtils.closeAll(is,br,socket);
		}
		
	}
}


//------客户端------
public class Clent {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("127.0.0.1", 10010);
		
		System.out.println("请从客户端进行录入:");
		OutputStream os = socket.getOutputStream();  //字符缓冲流包装
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
		//从键盘录入
		Scanner sc = new Scanner(System.in);
	
			while(true) {
				String msg = sc.next();
				bw.write(msg);
				bw.newline();  //换行
				bw.flush();    //刷新
				
				if(msg.equals("886")) {  //约定
					break;
				}
			}
			IOUtils.closeAll(os,bw,socket);
	}
}

 





 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号