導航:首頁 > 手機軟體 > udp文件收發軟體

udp文件收發軟體

發布時間:2022-08-07 16:46:37

『壹』 用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]='';
else
{
acStr[0]='0';
acStr[1]='';
}
}

voidsleepUDP(intiSleep)
{
#ifdef_MSC_VER
Sleep(iSleep);
#else
usleep(iSleep*1000);
#endif
}

voidopenUDP(char*acIpAddr)
{
#ifdef_MSC_VER
//Winsows啟用socket
WSADATAwsadata;
if(WSAStartup(MAKEWORD(1,1),&wsadata)==SOCKET_ERROR)
{
printf("啟用socket失敗 ");
exit(0);
}
#endif

//新建socket
if((iUDP=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1)
{
printf("新建socket失敗 ");
exit(0);
}

//清零
memset(&serverAddr,0,sizeof(serverAddr));
memset(&clientAddr,0,sizeof(clientAddr));

//設置協議IP地址及Port
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(iServerPort);
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);

clientAddr.sin_family=AF_INET;
clientAddr.sin_port=htons(iClientPort);
clientAddr.sin_addr.s_addr=inet_addr(acIpAddr);

//綁定埠,監聽埠
if(bind(iUDP,(structsockaddr*)&serverAddr,sizeof(serverAddr))==-1)
{
printf("綁定埠失敗 ");
exit(0);
}
}

voidcloseUDP(void)
{
#ifdef_MSC_VER
//Winsows關閉socket
closesocket(iUDP);
WSACleanup();
#endif
}

//要發送的字元串
characSendStr[SIZEA];
//接收到的字元串
characRecvStr[SIZEA];
//請求信息
characReq[SIZEA];
//文件名字元串
characFileName[SIZEA];
//文件位元組數字元串
characFileSize[SIZEA];

intiSize,iNameSize;

//接收文件名
#ifdef_MSC_VER
DWORDWINAPIrecvName(LPVOIDp)
#else
void*recvName(void*arg)
#endif
{
intiAddrSize=sizeof(remoteAddr);
acReq[0]='n';acReq[1]='a';acReq[2]='m';acReq[3]='e';acReq[4]='';
acRecvStr[0]='';
printf("%s ","正在發送請求信息!");
//發送請求信息
sendto(iUDP,acReq,strlen(acReq),0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件名
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
return0;
}

//接收文件
voidrecvFile(char*acDirName,char*acIpAddr)
{
FILE*pFile=NULL;
inti,iFileSize,iRecvNum,iAddrSize=sizeof(remoteAddr);
//路徑文件名
characDirAndFileName[SIZEA];

openUDP(acIpAddr);
//接收文件名
for(;;)
{
//創建線程
#ifdef_MSC_VER
HANDLEhThread;
DWORDthreadId;
hThread=CreateThread(NULL,0,recvName,0,0,&threadId);
//每次發送後等待一段時間
sleepUDP(1000);
//強制終止線程
TerminateThread(hThread,0);
#else
pthread_tthread;
void*thread_arg=(pthread_t)0;
pthread_create(&thread,NULL,recvName,(void*)&thread_arg);
//每次發送後等待一段時間
sleepUDP(1000);
//強制終止線程
pthread_cancel(thread);
#endif
if(acRecvStr[0]!='')
{
acRecvStr[iSize]='';
printf("文件名為:%s ",acRecvStr);
break;
}
}

acDirAndFileName[0]='';
strcat(acDirAndFileName,acDirName);
//連接路徑名和文件名
strcat(acDirAndFileName,acRecvStr);
//如果已經有這個文件了就清空文件內容
pFile=fopen(acDirAndFileName,"w");
fclose(pFile);

acReq[0]='s';acReq[1]='i';acReq[2]='z';acReq[3]='e';acReq[4]='';
//接收文件位元組數
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件位元組數
acRecvStr[0]='';
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
if(acRecvStr[0]!='')
{
acRecvStr[iSize]='';
iFileSize=strToInt(acRecvStr);
printf("文件位元組數為:%d ",iFileSize);
break;
}
}

//以追加方式寫入文件
pFile=fopen(acDirAndFileName,"ab");
//文件分幾次接收
iRecvNum=iFileSize/SIZEB;
//接收文件
for(i=0;i<iRecvNum;i++)
{
intToStr(i,acReq);
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
printf("%s 正在接收文件的第%d段 ",acReq,i);
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收一段文件
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
if(iSize==SIZEB)
{
//以追加方式寫入文件
fwrite(acRecvStr,sizeof(char),iSize,pFile);
break;
}
}
}
//接收文件剩餘位元組
iSize=iFileSize%SIZEB;
if(iSize>0)
{
acReq[0]='l';acReq[1]='a';acReq[2]='s';acReq[3]='t';acReq[4]='';
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件剩餘位元組
if(recvfrom(iUDP,acRecvStr,iSize,0,(structsockaddr*)&remoteAddr,&iAddrSize)==iSize)
{
//以追加方式寫入文件
fwrite(acRecvStr,sizeof(char),iSize,pFile);
break;
}
}
}
printf("%s ","文件接收完畢!");

//關閉文件
fclose(pFile);
//關閉連接
closeUDP();
}

//發送文件名
#ifdef_MSC_VER
DWORDWINAPIsendName(LPVOIDp)
#else
void*sendName(void*arg)
#endif
{
intiAddrSize=sizeof(remoteAddr);
acRecvStr[0]='';
//接收請求
printf("%s ","正在接收請求信息!");
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確發送文件名
if(acRecvStr[0]=='n'&&acRecvStr[1]=='a'&&acRecvStr[2]=='m'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
sendto(iUDP,acFileName,iNameSize,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
return0;
}

//發送文件
voidsendFile(char*acDirAndFileName,char*acIpAddr)
{
inti,j,iFileSize,iSendNum,iAddrSize=sizeof(remoteAddr);
FILE*pFile=NULL;

pFile=fopen(acDirAndFileName,"rb");
fseek(pFile,0,SEEK_END);
//文件位元組數
iFileSize=ftell(pFile);
intToStr(iFileSize,acFileSize);
//printf("%s ",acDirAndFileName);

//獲取文件名長度
iSize=strlen(acDirAndFileName);
for(i=iSize-1,iNameSize=0;i>=0;i--,iNameSize++)
if(acDirAndFileName[i]=='\'||acDirAndFileName[i]=='/')
break;
//printf("%d ",iNameSize);

//截取文件名
for(i=0;i<iNameSize;i++)
acFileName[i]=acDirAndFileName[iSize-iNameSize+i];
acFileName[iNameSize]='';
//printf("%s ",acFileName);

openUDP(acIpAddr);
//發送文件名
for(;;)
{
//創建線程
#ifdef_MSC_VER
HANDLEhThread;
DWORDthreadId;
hThread=CreateThread(NULL,0,sendName,0,0,&threadId);
//每次接收請求信息後等待一段時間
sleepUDP(1000);
//強制終止線程
TerminateThread(hThread,0);
#else
pthread_tthread;
void*thread_arg=(pthread_t)0;
pthread_create(&thread,NULL,sendName,(void*)&thread_arg);
//每次接收請求信息後等待一段時間
sleepUDP(1000);
//強制終止線程
pthread_cancel(thread);
#endif
//如果請求信息正確退出循環
if(acRecvStr[0]=='n'&&acRecvStr[1]=='a'&&acRecvStr[2]=='m'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
break;
}
//發送文件位元組數
for(;;)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確
if(acRecvStr[0]=='s'&&acRecvStr[1]=='i'&&acRecvStr[2]=='z'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
{
//發送文件位元組數
sendto(iUDP,acFileSize,strlen(acFileSize),0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
break;
}
}

iSendNum=iFileSize/SIZEB;
//發送文件
if(iSendNum>0)
{
for(i=0;;i++)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
printf("%s 正在發送文件的第%d段 ",acRecvStr,i);
//每次接收請求信息後等待一段時間
sleepUDP(10);
fseek(pFile,strToInt(acRecvStr)*SIZEB,SEEK_SET);
fread(acSendStr,1,SIZEB,pFile);
//printf("%s ",acSendStr);
//發送一段文件
sendto(iUDP,acSendStr,SIZEB,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
if(strToInt(acRecvStr)>=iSendNum-1)
break;
}
}
//發送文件剩餘位元組
iSize=iFileSize%SIZEB;
if(iSize>0)
{
for(;;)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確
if(acRecvStr[0]=='l'&&acRecvStr[1]=='a'&&acRecvStr[2]=='s'&&acRecvStr[3]=='t'&&acRecvStr[4]=='')
{
fseek(pFile,iSendNum*SIZEB,SEEK_SET);
fread(acSendStr,1,iSize,pFile);
//printf("%s ",acSendStr);
//發送文件剩餘位元組
sendto(iUDP,acSendStr,iSize,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
break;
}
}
}
printf("%s ","文件發送完畢!");

//關閉連接
closeUDP();
}

intmain(void)
{
characDirName[SIZEA];
characDirAndFileName[SIZEA];
characIpAddr[15];
inti,iOption=0,iSize=0;
FILE*pFile=NULL;
charcLast='\';

option:
printf("%s ","**************************************************** 本程序包括伺服器端和客戶端,既可以發送文件又可以接收文件。 支持無線WiFi,支持USB收發器,但僅支持區域網內傳送文件。 如果要在Windows和Linux之間傳送文件,文件名不能出現中文。 如果要在同一台機器上測試需要同時打開兩個程序。 ****************************************************");
printf("%s ","請輸入選項,1.發送文件、2.接收文件。");
scanf("%d",&iOption);

//發送文件
if(iOption==1)
{
iServerPort=1025;
iClientPort=1024;
fileName:
printf("%s ","請輸入需要發送的路徑文件名。 Windows路徑文件名格式: C:\install.txt Linux路徑文件名格式: /home/install.txt");
scanf("%s",acDirAndFileName);
pFile=fopen(acDirAndFileName,"rb");
if(pFile==NULL)
{
printf("%s ","讀取文件失敗,請重新輸入文件名。");
gotofileName;
}
//關閉文件
fclose(pFile);

printf("%s ","請輸入接收文件方的IP地址,不能有空格。 例如: 192.168.1.104");
scanf("%s",acIpAddr);

sendFile(acDirAndFileName,acIpAddr);
}
//接收文件
elseif(iOption==2)
{
iServerPort=1024;
iClientPort=1025;
dirName:
printf("%s ","請輸入保存文件的路徑名。 Windows路徑名格式: C:\img\ Linux路徑名格式: /home/");
scanf("%s",acDirName);

iSize=strlen(acDirName);
//檢查是不是Linux路徑名
for(i=0;i<iSize;i++)
{
if(acDirName[i]=='/')
{
cLast='/';
break;
}
}
//檢查路徑名最後一個字元是不是或/
if(acDirName[iSize-1]!=cLast)
{
acDirName[iSize]=cLast;
acDirName[iSize+1]='';
}
acDirAndFileName[0]='';
strcat(acDirAndFileName,acDirName);
strcat(acDirAndFileName,"a.txt");
//試探保存一個無關緊要的文件
pFile=fopen(acDirAndFileName,"w");
if(pFile==NULL)
{
printf("%s ","該路徑無法創建文件,請重新輸入路徑名。");
gotodirName;
}
else
{
//關閉文件
fclose(pFile);
//刪除文件
remove(acDirAndFileName);
}

printf("%s ","請輸入發送文件方的IP地址,不能有空格。 例如: 192.168.2.249");
scanf("%s",acIpAddr);

recvFile(acDirName,acIpAddr);
}
else
{
printf("%s ","沒有這個選項,請重新輸入。");
gotooption;
}

return0;
}

『伍』 vb winsock udp信息收發

Private Sub Form_Load()
'控制項的名字為 udpPeerA
With udpPeerA
'重點:必須將 RemoteHost 的值
'修改為計算機的名字。
.RemoteHost= "PeerB"
.RemotePort = 1001 '連接的埠號。
.Bind 1002 '綁定到本地的埠。
End With
frmPeerB.Show '顯示第二個窗體。
End Sub

Private Sub txtSend_Change()
'在鍵入文本時,立即將其發送出去。
udpPeerA.SendData txtSend.Text
End Sub

Private Sub udpPeerA_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerA.GetData strData
txtOutput.Text = strData
End Sub

『陸』 能否給我一個用純C編寫的UDP發送和接收的程序

UDP的,你看下

1.伺服器端實現

程序在收到客戶端發送來的消息後,給客戶端發送消息,提示客戶端收到了該消息

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
int sock, length, fromlen, n;
struct sockaddr_in server;
struct sockaddr_in from;
char buf[1024];

//要求執行是輸入埠信息
if (argc!= 2) {
printf( "Usage: %s port_num\n",argv[0]);
return 1;
}

//創建通信所需的套接字,並與地址和埠信息幫定
sock=socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0){
perror("cannot create communicating socket");
return 1;
}

length = sizeof(server);
bzero(&server,length);
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(atoi(argv[1]));

if (bind(sock,(struct sockaddr *)&server,length)<0){
perror("cannot bind the socket");
close(sock);
return 1;
}

fromlen = sizeof(struct sockaddr_in);

//讀取客戶端發送來的信息,顯示後,發回相關信息給客戶端
while (1) {
n = recvfrom(sock,buf,sizeof(buf),0,(struct sockaddr *)&from,&fromlen);
if (n < 0) {
perror("cannot receive date from client");
break;
}
write(STDOUT_FILENO,"server: Received a datagram: ",29);
write(STDOUT_FILENO,buf,n);

n = sendto(sock,"send message to client\n",22,
0,(struct sockaddr *)&from,fromlen);
if (n < 0) {
perror("cannot send data to the client");
break;
}
}

close(sock);
return 0;
}

2.客戶端實現

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
int sock, length, n;
struct sockaddr_in server, from;
struct hostent *hp;
char buffer[256];

//判斷輸入參數是否符合要求
if (argc != 3) {
printf("Usage: %s server_ip port_num\n",argv[0]);
return 1;
}

//創建通信套接字
sock= socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) {
perror("cannot create communicating socket");
return 1;
}

server.sin_family = AF_INET;
hp = gethostbyname(argv[1]);
if (hp==0) {
perror("cannot get the server ip address");
return 1;
}

b((char *)hp->h_addr,
(char *)&server.sin_addr,
hp->h_length);

server.sin_port = htons(atoi(argv[2]));
length=sizeof(struct sockaddr_in);

printf("(client) enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);

//發送數據給指定伺服器
n=sendto(sock,buffer,strlen(buffer),0,&server,length);
if (n < 0){
perror("cannot get message from the client");
return 1;
}

//從伺服器中接受數據
bzero(buffer,256);
n = recvfrom(sock,buffer,256,0,&from, &length);
if (n < 0) {
perror("cannot send message to the server");
return 1;
}

printf("client got message : %s\n",buffer);
close(sock);
return 0;
}

『柒』 udp 軟體有哪些

使用udp協議的軟體很多,如qq等一些聊天軟體等,用p2p協議的軟體也會使用udp協議。

『捌』 C# UDP文件發送 接收的例子(能夠實現丟包重發)

用UDPClient來實現,在發送前對文件內容分段發送,在分段的頭和尾進行預定義標記(像人民幣一樣,連號的),收到後再進行分析,看看有沒有接不上號的,如果有就是丟了包了

『玖』 如何實現TCP和UDP傳輸

劃分為使用TCP埠(面向連接如打電話)和使用UDP埠(無連接如寫信)兩種。網路中可以被命名和定址的通信埠是操作系統的一種可分配資源。由網路OSI(開放系統互聯參考模型,)七層協議可知,傳輸層與網路層最大的區別是傳輸層提供進程通信能力,網路通信的最終地址不僅包括主機地址,還包括可描述進程的某種標識。所以TCP/IP協議提出的協議埠,可以認為是網路通信進程的一種標識符。應用程序(調入內存運行後一般稱為:進程)通過系統調用與某埠建立連接(binding,綁定)後,傳輸層傳給該埠的數據都被相應的進程所接收,相應進程發給傳輸層的數據都從該埠輸出。在TCP/IP協議的實現中,埠操作類似於一般的I/O操作,進程獲取一個埠,相當於獲取本地唯一的I/O文件,可以用一般的讀寫方式訪問類似於文件描述符,每個埠都擁有一個叫埠號的整數描述符,用來區別不同的埠。由於TCP/IP傳輸層的TCP和UDP兩個協議是兩個完全獨立的軟體模塊,因此各自的埠號也相互獨立。如TCP有一個255號埠,UDP也可以有一個255號埠,兩者並不沖突。埠號有兩種基本分配方式:第一種叫全局分配這是一種集中分配方式,由一個公認權威的中央機構根據用戶需要進行統一分配,並將結果公布於眾,第二種是本地分配,又稱動態連接,即進程需要訪問傳輸層服務時,向本地操作系統提出申請,操作系統返回本地唯一的埠號,進程再通過合適的系統調用,將自己和該埠連接起來(binding,綁定)。TCP/IP埠號的分配綜合了以上兩種方式,將埠號分為兩部分,少量的作為保留埠,以全局方式分配給服務進程。每一個標准伺服器都擁有一個全局公認的埠叫周知口,即使在不同的機器上,其埠號也相同。剩餘的為自由埠,以本地方式進行分配。TCP和UDP規定,小於256的埠才能作為保留埠。按埠號可分為3大類:(1)公認埠(WellKnownPorts):從0到1023,它們緊密綁定(binding)於一些服務。通常這些埠的通訊明確表明了某種服務的協議。例如:80埠實際上總是HTTP通訊。(2)注冊埠(RegisteredPorts):從1024到49151。它們鬆散地綁定於一些服務。也就是說有許多服務綁定於這些埠,這些埠同樣用於許多其它目的。例如:許多系統處理動態埠從1024左右開始。(3)動態和/或私有埠(Dynamicand/orPrivatePorts):從49152到65535。理論上,不應為服務分配這些埠。實際上,機器通常從1024起分配動態埠。但也有例外:SUN的RPC埠從32768開始。系統管理員可以"重定向"埠:一種常見的技術是把一個埠重定向到另一個地址。例如默認的HTTP埠是80,不少人將它重定向到另一個埠,如8080。如果是這樣改了,要訪問本文就應改用這個地址.cn:8080。埠漏洞:8080埠可以被各種病毒程序所利用,比如BrownOrifice(BrO)特洛伊木馬病毒可以利用8080埠完全遙控被感染的計算機。另外,RemoConChubo,RingZero木馬也可以利用該埠進行攻擊。操作建議:一般我們是使用80埠進行網頁瀏覽的,為了避免病毒的攻擊,我們可以關閉該埠。埠:21服務:FTP說明:FTP伺服器所開放的埠,用於上傳、下載。最常見的攻擊者用於尋找打開anonymous的FTP伺服器的方法。這些伺服器帶有可讀寫的目錄。木馬DolyTrojan、Fore、InvisibleFTP、WebEx、WinCrash和BladeRunner所開放的埠。埠:22服務:Ssh說明:PcAnywhere建立的TCP和這一埠的連接可能是為了尋找ssh。這一服務有許多弱點,如果配置成特定的模式,許多使用RSAREF庫的版本就會有不少的漏洞存在。埠:23服務:Telnet說明:遠程登錄,入侵者在搜索遠程登錄UNIX的服務。大多數情況下掃描這一埠是為了找到機器運行的操作系統。還有使用其他技術,入侵者也會找到密碼。木馬TinyTelnetServer就開放這個埠。埠:25服務:SMTP說明:SMTP伺服器所開放的埠,用於發送郵件。入侵者尋找SMTP伺服器是為了傳遞他們的SPAM。入侵者的帳戶被關閉,他們需要連接到高帶寬的E-MAIL伺服器上,將簡單的信息傳遞到不同的地址。木馬Antigen、EmailPasswordSender、HaebuCoceda、ShtrilitzStealth、WinPC、WinSpy都開放這個埠。埠:80服務:HTTP說明:用於網頁瀏覽。木馬Executor開放此埠。埠:102服務:Messagetransferagent(MTA)-X.400overTCP/IP說明:消息傳輸代理。埠:109服務:PostOfficeProtocol-Version3說明:POP3伺服器開放此埠,用於接收郵件,客戶端訪問伺服器端的郵件服務。POP3服務有許多公認的弱點。關於用戶名和密碼交換緩沖區溢出的弱點至少有20個,這意味著入侵者可以在真正登陸前進入系統。成功登陸後還有其他緩沖區溢出錯誤。埠:110服務:SUN公司的RPC服務所有埠說明:常見RPC服務有rpc.mountd、NFS、rpc.statd、rpc.csmd、rpc.ttybd、amd等埠:119服務:NetworkNewsTransferProtocol說明:NEWS新聞組傳輸協議,承載USENET通信。這個埠的連接通常是人們在尋找USENET伺服器。多數ISP限制,只有他們的客戶才能訪問他們的新聞組伺服器。打開新聞組伺服器將允許發/讀任何人的帖子,訪問被限制的新聞組伺服器,匿名發帖或發送SPAM。埠:135服務:LocationService說明:Microsoft在這個埠運行DCERPCend-pointmapper為它的DCOM服務。這與UNIX111埠的功能很相似。使用DCOM和RPC的服務利用計算機上的end-pointmapper注冊它們的位置。遠端客戶連接到計算機時,它們查找end-pointmapper找到服務的位置。HACKER掃描計算機的這個埠是為了找到這個計算機上運行ExchangeServer嗎?什麼版本?還有些DOS攻擊直接針對這個埠。埠:137、138、139服務:NETBIOSNameService說明:其中137、138是UDP埠,當通過網上鄰居傳輸文件時用這個埠。而139埠:通過這個埠進入的連接試圖獲得NetBIOS/SMB服務。這個協議被用於windows文件和列印機共享和SAMBA。還有WINSRegisrtation也用它。埠:161服務:SNMP說明:SNMP允許遠程管理設備。所有配置和運行信息的儲存在資料庫中,通過SNMP可獲得這些信息。許多管理員的錯誤配置將被暴露在Internet。Cackers將試圖使用默認的密碼public、private訪問系統。他們可能會試驗所有可能的組合。SNMP包可能會被錯誤的指向用戶的網路埠:177服務:說明:許多入侵者通過它訪問X-windows操作台,它同時需要打開6000埠。埠:389服務:LDAP、ILS說明:輕型目錄訪問協議和共用這一埠。限制埠防非法入侵[分享]一般來說,我們採用一些功能強大的反黑軟體和防火牆來保證我們的系統安全,本文擬用一種簡易的法——通過限制埠來幫助大家防止非法入侵。非法入侵的方式簡單說來,非法入侵的方式可粗略分為4種:1、掃描埠,通過已知的系統Bug攻入主機。2、種植木馬,利用木馬開辟的後門進入主機。3、採用數據溢出的手段,迫使主機提供後門進入主機。4、利用某些軟體設計的漏洞,直接或間接控制主機。非法入侵的主要方式是前兩種,尤其是利用一些流行的黑客工具,通過第一種方式攻擊主機的情況最多、也最普遍;而對後兩種方式來說,只有一些手段高超的黑客才利用,波及面並不廣泛,而且只要這兩種問題一出現,軟體服務商很快就會提供補丁,及時修復系統。對於個人用戶來說,您可以限制所有的埠,因為您根本不必讓您的機器對外提供任何服務;而對於對外提供網路服務的伺服器,我們需把必須利用的埠(比如WWW埠80、FTP埠21、郵件服務埠25、110等)開放,其他的埠則全部關閉。這里,對於採用Windows2000或者WindowsXP的用戶來說,不需要安裝任何其他軟體,可以利用「TCP/IP篩選」功能限制伺服器的埠。具體設置如下:1、右鍵點擊「網上鄰居」,選擇「屬性」,然後雙擊「本地連接」(如果是撥號上網用戶,選擇「我的連接」圖標),彈出「本地連接狀態」對話框。2、點擊[屬性]按鈕,彈出「本地連接屬性」,選擇「此連接使用下列項目」中的「Internet協議(TCP/IP)」,然後點擊[屬性]按鈕。3、在彈出的「Internet協議(TCP/IP)」對話框中點擊[高級]按鈕。在彈出的「高級TCP/IP設置」中,選擇「選項」標簽,選中「TCP/IP篩選」,然後點擊[屬性]按鈕。4、在彈出的「TCP/IP篩選」對話框里選擇「啟用TCP/IP篩選」的復選框,然後把左邊「TCP埠」上的「只允許」選上。這樣,您就可以來自己添加或刪除您的TCP或UDP或IP的各種埠了。添加或者刪除完畢,重新啟動機器以後,您的伺服器就被保護起來了。最後,提醒個人用戶,如果您只上網瀏覽的話,可以不添加任何埠。但是要利用一些網路聯絡工具,比如OICQ的話,就要把「4000」這個埠打開,同理,如果發現某個常用的網路工具不能起作用的時候,請搞清它在您主機所開的埠,然後在「TCP/IP「里把此埠打開以上來源於網路,不過分析得很好了相同點:都處於傳輸層不同點:TCP~面向連接、可靠、傳輸慢、保證數據的順序UDP~面向無連接、不可靠、傳輸快、數據按照不同路徑到,不保證數據順序且兩者傳輸的模式不一樣

『拾』 有沒有區域網內兩台主機之間發送文件的軟體可以選擇TCP、UDP協議發送的那種

飛鴿傳書,區域網內,不需要伺服器,點對點,功能與QQ相似。

閱讀全文

與udp文件收發軟體相關的資料

熱點內容
電腦上怎麼下載班智達的軟體 瀏覽:1157
無痕跡消除圖片軟體 瀏覽:722
免費小票軟體 瀏覽:955
華為在哪裡設置軟體停止運行 瀏覽:961
用電腦鍵盤調節聲音大小 瀏覽:1258
自動刷軟體賺錢 瀏覽:1261
古裝連續劇免費版 瀏覽:1414
工免費漫畫 瀏覽:1144
手機軟體專門儲存文件 瀏覽:1509
uos如何用命令安裝軟體 瀏覽:1316
有線耳機插電腦麥克風 瀏覽:647
侏羅紀世界3在線觀看完整免費 瀏覽:995
單個軟體怎麼設置名稱 瀏覽:719
鳳凰網電腦版下載視頻怎麼下載視頻怎麼下載 瀏覽:1385
明白之後如何免費獲得無人機 瀏覽:831
如何解禁軟體菜單 瀏覽:855
副路由器連接電腦視頻 瀏覽:1351
內置wifi電視如何裝軟體 瀏覽:1107
手機換零免費雪碧 瀏覽:1589
國行蘋果如何下載美版軟體 瀏覽:1214