java基础笔记(十一)

1.使用UDP进行数据多次通信

public class UDPReceiver {

public static void main(String[] args) throws IOException {
	// TODO Auto-generated method stub
	//1.创建DatagramSocket对象,
	//强调:接收端必须指定一个端口号
	DatagramSocket ds = new DatagramSocket(12345);
	while(true){
		//2.直接创建一个DatagramPacket对象
		byte[] bs = new byte[1024];
		DatagramPacket dp = new DatagramPacket(bs, bs.length);
		//3.接收
		System.out.println("等待发送端发送数据....");
		ds.receive(dp);//这个方法具有等待功能,等待发送端发送过来的数据
		System.out.println("接收数据成功!!");
		//获取发送端的地址
		InetAddress sendAddress = dp.getAddress();
		System.out.println("发送端是:"+sendAddress.getHostAddress());
		//获取真正的数据
		byte[] data = dp.getData();
		//获取发送端 发来了多少字节
		int len = dp.getLength();
		//打印数据
		String receiveMsg = new String(data, 0, len);
		System.out.println("发送端说:"+receiveMsg);
	}
	//4.关闭资源
	//ds.close();
	
}

}

 public class UDPSender {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		//1.创建DatagramSocket对象
		DatagramSocket ds = new DatagramSocket();
		while(true){
			//2.创建DatagramPacket对象
			//存储 发送的数据,对方的IP,端口号
			System.out.println("请输入您要发送的数据:");
			String sendMsg = sc.nextLine();
			byte[] bs = sendMsg.getBytes();
			//IP地址:127.0.0.1  代表本机,本地回环地址
			DatagramPacket dp = new DatagramPacket(bs,bs.length,InetAddress.getByName("127.0.0.1"),12345);
			//3.发送
			ds.send(dp);
			System.out.println("发送数据成功!!!");//192.168.146.72
		}
		//4.关闭资源
		//ds.close();
	}
}

2.使用TCP传输数据的完整步骤

TCP客户端:
  
  1.创建Socket对象,传入服务器的IP和端口
  
  2.通过Socket对象获取输出流,调用write方法写数据到服务器
  
  3.通过socket对象获取输入流,调用read方法读取服务器反馈的信息
  
  4.关闭(Socket对象)
  
  
  TCP服务端:
  
  1.创建ServerSocket对象,传入一个端口,端口必须和客户端的一样
  
  2.先获取哪一个客户端连接的服务器,通过accept()方法获取
  
  3.通过Socket对象获取输入流,调用read方法读取客户端发来的数据
  
  4.通过socket对象获取输出流,调用write方法向客户端反馈数据
  
  5.关闭(ServerSocket,Socket)

public class ClientDemo {
	public static void main(String[] args) throws IOException {
		 // 1.创建一个客户端对象(注意:指定这个Socket要连接的服务器的IP和端口)
		/*
		 * 这个构造方法干了很多事情:
		 * a.自动去连接服务器
		 * b.自动进行三次握手,建立连接
		 * c.自动为连接中创建两个流
		 */
		Socket client = new Socket("127.0.0.1", 12345);
	  
	 // 2.从客户端对象中获取 输出流:getOutputStream()
	//OutputStream out = client.getOutputStream();
	 // 3.调用输出流的Write方法写数据到服务器即可
	//out.write("How are you".getBytes());
	client.getOutputStream().write("How are you".getBytes());
	System.out.println("给服务器发送数据成功!!");
	//4.读取服务器 发送过来的反馈信息
	InputStream in = client.getInputStream();
	byte[] bs = new byte[1024];
	int len = in.read(bs);
	System.out.println("服务器响应:"+new String(bs,0,len));
	 //  关闭资源
	client.close();
}
}

public class ServerDemo {
	public static void main(String[] args) throws IOException {
		//1.创建一个ServerSocket对象,必须绑定一个端口,这个端口必须和客户端连接的端口一致
		ServerSocket server = new ServerSocket(12345);
		//2.获取到 哪一个 客户端连接的我
		System.out.println("等待客户端连接...");
		Socket client = server.accept();//此方法也具有等待功能,等待某一个客户端连接
		//打印一些和客户端有关信息
		String ip = client.getInetAddress().getHostAddress();
		System.out.println("小样,抓到你了:"+ip);
		//3.获取输入流,实际上是客户端写数据时的输出流
		InputStream in = client.getInputStream();
		//4.读取数据
		byte[] bs = new byte[1024];
		int len = in.read(bs);
		//打印
		System.out.println("客户端说:"+new String(bs,0,len));
		//5.要向客户端 回写数据,告诉客户端您的信息我已经收到了
		OutputStream out = client.getOutputStream();
		out.write("您的消息已经收到...".getBytes());
		System.out.println("给客户端反馈的信息发送成功!!!");
		
		//关闭资源
		server.close();
		client.close();
		in.close();
		
	}
}

3.使用TCP文件上传

public class FileUploadClient {
	public static void main(String[] args)throws IOException {
		//1.创建Socket对象,连接服务器
		Socket client = new Socket("127.0.0.1", 12345);
		System.out.println("连接服务器成功..");
		//2.获取输出流,把数据写向服务器
		OutputStream out = client.getOutputStream();
		//3.创建文件的输入流,读取本地的文件数据
		FileInputStream fis = new FileInputStream("D:\\11.png");
		//4.循环,读取本地文件,写到服务器
		byte[] bs = new byte[1024];
		int len = 0;
		while((len=fis.read(bs))!=-1){
			out.write(bs, 0, len);
		}
		System.out.println("文件已经上传到服务器.");
		//5.关闭
		client.close();
		out.close();
		fis.close();
	}
}

public class FileUploadServer {
public static void main(String[] args) throws IOException {
	// TODO Auto-generated method stub
	//1.创建ServerSocket对象,绑定一个端口
	ServerSocket server = new ServerSocket(12345);
	while(true){
		//2.获取哪一个客户端连接的服务器
		System.out.println("等待客户端连接...");
		Socket client = server.accept();
		System.out.println("小样:"+client.getInetAddress().getHostAddress());
		//3.获取输入流,读取客户端发来数据
		InputStream in = client.getInputStream();
		//4.创建文件的输出流,把数据写到文件中
		String picName = "F:\\"+System.currentTimeMillis()+".png";
		FileOutputStream fos = new FileOutputStream(picName);
		//5.循环 从输入流读取客户端数据, 写入到文件中
		byte[] bs = new byte[1024];
		int len = 0;
		while((len=in.read(bs))!=-1){
			fos.write(bs, 0, len);
		}
		System.out.println("客户端的文件已经保存完毕,可以查看了"+picName);
		client.close();
		in.close();
		fos.close();
	}
	//6.关闭
	//server.close();
	
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值