⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.java

📁 用udp实现可靠数据传递
💻 JAVA
字号:
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;

import javax.net.*;

public class Client {
	private static boolean send;

	private static int number;

	public static void sendOrNot() {
		int number = (int) (Math.random() * 100);
		System.out.println(number);
		if (number >= 50) {
			send = true;
		} else {
			send = false;
		}
	}

	public static void main(String[] args) throws IOException {
		byte[] by = new byte[1024];
		byte[] bt = new byte[1024];
		//byte[] be = new byte[1024];
		int i = 1;
		String[] s = new String[10];
		DatagramSocket ds = new DatagramSocket(8888);
		DatagramPacket dp1 = null;
		DatagramPacket dp2 = null;
		//DatagramPacket dp3 = null;
		DatagramPacket dp = new DatagramPacket(by, by.length);
		FileReader fr = new FileReader("f:/ss/ss.txt");
		BufferedReader br = new BufferedReader(fr);
		int num = 0;

		for (i = 1;; i++) {
			String str = br.readLine();
			if (str == null)
				break;
			s[i] = i + str;

			System.out.println(s[i]);
			by = s[i].getBytes();
			String str1 = br.readLine();
			
				s[++i] = i + str1;
				bt = s[i].getBytes();
				System.out.println(s[i]);
			
			
			dp1 = new DatagramPacket(by, by.length, new InetSocketAddress(
					"127.0.0.1", 9000));
			dp2 = new DatagramPacket(bt, bt.length, new InetSocketAddress(
					"127.0.0.1", 9000));
			while (num != (i - 1)) {// 如果第一次没有收到包,说明两个都没有发送到
				Client.sendOrNot();
				if (send) {
					System.out.println("发送第" + (i - 1) + "个包!");
					ds.send(dp1);// 发送第一个包
				} else {
					System.out.println("没有发送第" + (i - 1) + "个包!");
				}
				if(str1 != null){
					Client.sendOrNot();
					if (send) {
						System.out.println("发送第" + i + "个包!");
						ds.send(dp2);// 发送第2个包
					} else {
						System.out.println("没有发送第" + i + "个包!");
					}
				}else{
					System.out.println("文件以空,没发送第" + i + "个包!");
				}
				
				try {

					ds.setSoTimeout(5000);
					ds.receive(dp);
					String s1 = new String(dp.getData(), 0, dp.getLength());
					Integer it = new Integer(s1);
					num = it.intValue();
					if (num == (i - 1)) {
						System.out.println("服务器已收到第" + (i - 1) + "个包!");

					}

					if (num == i) {
						System.out.println("服务器已收到第" + i + "个包!,但是没有收到第"
								+ (i - 1) + "个包!重新发送两个包!");

					}
				} catch (SocketTimeoutException ex) {
					System.out.println("服务器两个包都没收到,重新发送");
				}
			}
			if(str1 != null){
				while (num != i) {
					try {

						ds.setSoTimeout(5000);
						ds.receive(dp);
						String s1 = new String(dp.getData(), 0, dp.getLength());
						Integer it = new Integer(s1);
						num = it.intValue();
						if (num == i) {
							System.out.println("服务器已收到第" + i + "个包!");
						}
					} catch (SocketTimeoutException e) {
						System.out.println("没有收到第2个包");
						System.out.println("发送第2个包");
						ds.send(dp2);
					}

				}
			}
			
		}

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -