『壹』 用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]='