‘壹’ 用udp协议发送数据
1. 在资源管理器的查看或工具菜单中选文件夹选项,选中"根据所选设置自定义"一项之后按设置按钮,选中"在同一窗口中打开每个文件夹"一项就好了。
2. 我的电脑中没有这个文件,说明它是某个软件的文件,你只要用查找文件的功能找一下就可以知道它在什么位置,根据文件夹的名称判断出是哪个软件的文件,卸载或重装一遍这个软件应该可以解决。
我想是这个软件冬冬
ZoneAlarm Free
这个软件你是否装了
ZoneAlarm来保护你的电脑,防止Trojan(特洛伊木马)程序,Trojan也是一种极为可怕的程序。ZoneAlarm可以帮你执行这项重大任务喔。而且还是免费的。使用很简单,你只要在安装时填入你的资料,如有最新的ZoneAlarm,你就可以免费网上更新。安装完后从新开机,ZoneAlarm就会自动启动,帮你执行任务。当有程序想要存取Internet时,如网络浏览器可能会出现连不上网络,这时你可以在右下角ZoneAlarm的小图示上按两下鼠标左键,选取Programs的选项,勾选你要让哪些软件上网,哪些不可以上网,利用此种方法来防治一些来路不明的软件偷偷上网。最好的方法是锁住(Lock)网络不让任何程序通过,只有你核准的软件才可以通行无阻。你还可利用它来看看你开机后已经使用多少网络资源,也可以设定锁定网络的时间。这么好用的软件你一定要亲自使用才能感觉到它的威力。
如装了应该没有问题
‘贰’ C#udp文件传输程序
使用UDP协议进行文件传输不能保证正确性,很容易发生丢包的情况。建议在进行较大文件传输的时候使用TCP的Socket和ServerSocket类进行传输。在数据量小于65600字节的时候使用UDP是安全的
如果一定要使用UDP方式进行传输的话,为了提高传输的准确性,可以限制一下传输速度,方法是在发送端每次发送后sleep一下,即在发送端程序的dataSocket.send(dataPacket);一句后加上:
TimeUnit.MICROSECONDS.sleep(1);
不过这种方法也不能保证传输绝对准确,所以还是建议用TCP的方式
程序本身应该是能够达到效果的,不知道错误提示是什么。测试之前要看下发送端的filePath文件是否存在,貌似防火墙也有影响,测试之间最好关闭防火墙。下面是我的测试程序,接收端是类A1,接收端是类A2,发送端的文件filePath是D盘根目录下的a1.mkv:
接收端:
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class A1 {
public static DatagramSocket dataSocket;
public static final int PORT=7;
public static byte[] receiveByte;
public static DatagramPacket dataPacket;
public static void main(String[] args) throws IOException{
dataSocket = new DatagramSocket(PORT);
DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream("D:\\a.mkv"))));
int i = 0;
while (i == 0)// 无数据,则循环
{
receiveByte = new byte[1024];
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
dataSocket.receive(dataPacket);
i = dataPacket.getLength();
// 接收数据
if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点
fileOut.write(receiveByte,0,i);
fileOut.flush();
i = 0;// 循环接收
}
}
}
}
发送端:
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.util.Date;
public class A2 {
public static DatagramSocket dataSocket;
public static final int PORT=7;
public static byte[] sendDataByte;
public static DatagramPacket dataPacket;
public static void main(String[] args) throws IOException, InterruptedException{
String filePath="D:\\a1.mkv";
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
dataSocket = new DatagramSocket(PORT+1);
sendDataByte = new byte[1024];
int read=0;
long a=new Date().getTime();
while(true){
if (fis != null) {
read = fis.read(sendDataByte);
}
if (read == -1) {
System.out.println(new Date().getTime()-a);
break;
}
dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,(Inet4Address) Inet4Address.getByName("localhost"), PORT);
dataSocket.send(dataPacket);
TimeUnit.MICROSECONDS.sleep(1);//限制传输速度
}
}
}
‘叁’ 哪些软件是可以使用udp协议的
可以使用Windows Netmeeting 实现通信,文件共享,甚至远程桌面等等功能,非常好用。最关键的是使用UDP协议。xp操作系统运行下键入conf即可。
‘肆’ 请教用C语言编的借助UDP协议实现的文件传输的程序
本程序在 Windows 7 Visual Studio 2015 和 Linux Ubuntu 15.04 GCC 5.11 下均编译运行测试通过。
本程序支持 Windows 和 Linux 之间传送文件,如果要在 Windows 和 Linux 之间传送文件,文件名不能出现中文。
本程序支持无线 WiFi,支持 USB 收发器,但仅支持局域网内传送文件,传送文件需要输入对方的 IP 地址。
本程序包括服务器端和客户端,既可以发送文件又可以接收文件。如果要在同一台机器上测试需要同时打开两个程序。
Windows 下查看本机 IP 地址的命令是:
ipconfig
Linux 下查看本机 IP 地址的命令是:
ifconfig
以下是程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#ifdef_MSC_VER
#include<winsock2.h>
#include<windows.h>
#pragmacomment(lib,"ws2_32.lib")
#else
#include<pthread.h>
#include<unistd.h>
#include<signal.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#endif
//存放发送接收字符数组大小
#defineSIZEA65501
//每次发送接收字节数
#defineSIZEB65500
typedefstructsockaddr_inSockAddrIn;
SockAddrInserverAddr,remoteAddr,clientAddr;
//端口号
intiServerPort,iClientPort;
//新建socket信息
intiUDP;
//字符串转整型
intstrToInt(char*acStr)
{
inti,iIndex=0,iNum=0,iSize=0;
if(acStr[0]=='+'||acStr[0]=='-')
iIndex=1;
for(iSize=iIndex;;iSize++)
if(acStr[iSize]<'0'||acStr[iSize]>'9')
break;
for(i=iIndex;i<iSize;i++)
iNum+=(int)pow(10,iSize-i-1)*(acStr[i]-48);
if(acStr[0]=='-')
iNum=-iNum;
returniNum;
}
//整型转字符串
voidintToStr(intiInt,char*acStr)
{
intiIndex=0,iSize,iNum,iBit,i,j;
if(iInt<0)
{
acStr[0]='-';
iInt=-iInt;
iIndex=1;
}
for(i=0;;i++)
if(iInt<pow(10,i))
break;
iSize=i;
for(i=0;i<iSize;i++)
{
iNum=pow(10,iSize-i-1);
iBit=iInt/iNum;
iInt-=iNum*iBit;
acStr[i+iIndex]=iBit+48;
}
if(iSize!=0)
acStr[iSize+iIndex]='