testudpserverld.java

来自「UDP实现的可靠数据传递的小程序。 考虑了丢包的几种可能性及其处理方法。」· Java 代码 · 共 65 行

JAVA
65
字号
import java.net.*;
import java.io.*;
public class TestUDPServerld
{
	public static void main(String args[]) throws Exception
	{
		int i,j=0;
		byte buf[] = new byte[1024];
		byte data[] = new byte[15000];
		char k=' ',s = '\u0001';
		DatagramPacket dp1 = new DatagramPacket(buf, buf.length);
		DatagramSocket ds = new DatagramSocket(5678);
		FileOutputStream out = null;
		out = new FileOutputStream("C:/Documents and Settings/sc_admin/桌面/test2.txt");
		buf[0]=0;
		boolean f=false;
		while(k != '\u0000')
		{
			ds.setSoTimeout(10000);
		 	try
			{	
				ds.receive(dp1);
				f=true;
				System.out.println("接收成功!");
			}
			catch(SocketTimeoutException ex)
			{System.out.println("等待1秒...");}
			if(buf[0]==(int)s)
			{
				for(i=1;i<41;i++)
				{
					data[j++]=buf[i];
				}
				DatagramPacket dp2 = new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1", 9999));
				System.out.println((int)s+"已经到达");
				ds.send(dp2);
				s++;
				System.out.println("等待"+(int)s);
			}
			else
			{
				if(buf[0]==(int)'\u0000' && buf[42]==(int)s)
				{
					k='\u0000';
					for(i=1;i<41;i++)
					{
						data[j++]=buf[i];
					}
					System.out.println((int)s+"已经到达");
					
				}
				else
					if(f)
					{
						System.out.println("请重发"+ (int)s);
						f=false;
					}
					
				DatagramPacket dp2 = new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1", 9999));
				ds.send(dp2);
			}
		}
		out.write(data);
	}
}

⌨️ 快捷键说明

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