導航:首頁 > 編程語言 > tcp轉udp程序

tcp轉udp程序

發布時間:2023-01-17 14:19:54

㈠ 如何實現TCP和UDP傳輸

面向連接的TCP

「面向連接」就是在正式通信前必須要與對方建立起連接。比如你給別人打電話,必須等線路接通了、對方拿起話筒才能相互通話。

TCP(Transmission Control Protocol,傳輸控制協議)是基於連接的協議,也就是說,在正式收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次「對話」才能建立起來,其中的過程非常復雜,我們這里只做簡單、形象的介紹,你只要做到能夠理解這個過程即可。我們來看看這三次對話的簡單過程:主機A向主機B發出連接請求數據包:「我想給你發數據,可以嗎?」,這是第一次對話;主機B向主機A發送同意連接和要求同步(同步就是兩台主機一個在發送,一個在接收,協調工作)的數據包:「可以,你什麼時候發?」,這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:「我現在就發,你接著吧!」,這是第三次對話。三次「對話」的目的是使數據包的發送和接收同步,經過三次「對話」之後,主機A才向主機B正式發送數據。

TCP協議能為應用程序提供可靠的通信連接,使一台計算機發出的位元組流無差錯地發往網路上的其他計算機,對可靠性要求高的數據通信系統往往使用TCP協議傳輸數據。
面向非連接的UDP協議

「面向非連接」就是在正式通信前不必與對方先建立連接,不管對方狀態就直接發送。這與現在風行的手機簡訊非常相似:你在發簡訊的時候,只需要輸入對方手機號就OK了。

UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去!

UDP適用於一次只傳送少量數據、對可靠性要求不高的應用環境。比如,我們經常使用「ping」命令來測試兩台主機之間TCP/IP通信是否正常,其實「ping」命令的原理就是向對方主機發送UDP數據包,然後對方主機確認收到數據包,如果數據包是否到達的消息及時反饋回來,那麼網路就是通的。例如,在默認狀態下,一次「ping」操作發送4個數據包(如圖2所示)。大家可以看到,發送的數據包數量是4包,收到的也是4包(因為對方主機收到後會發回一個確認收到的數據包)。這充分說明了UDP協議是面向非連接的協議,沒有建立連接的過程。正因為UDP協議沒有連接的過程,所以它的通信效果高;但也正因為如此,它的可靠性不如TCP協議高。QQ就使用UDP發消息,因此有時會出現收不到消息的情況。
TCP協議和UDP協議各有所長、各有所短,適用於不同要求的通信環境。

㈡ TCP改寫基於UDP協議的通信程序

import java.io.*;import java.net.*;
import java.util.*;import java.sql.*;
class UDPServerThread extends Thread{
//啟動伺服器線程的主程序
private DatagramPacket packet;
private DatagramSocket socket;
static final int sport=4331;
UDPServerThread(){
try{
socket=new DatagramSocket(sport);//將socket連接到本地埠4331
System.out.println("I am waitting....");
}
catch(Exception e ){System.out.println("錯誤"+e);}
}
public void run(){
//線程操作
if(socket==null) return;
while(true){
try{
InetAddress addr; int cport;
byte[] buffer1=new byte[1000]; byte[] buffer2=new byte[1000];
String s="數據報已經接受到";
packet=new DatagramPacket(buffer1,buffer1.length);//生成一個接收數據報
socket.receive(packet);//接收收據報
String s1=new String(packet.getData());
System.out.println("從客戶端收到的數據是:"+s1);
addr=packet.getAddress();
cport=packet.getPort();
double a[]=new double[3] ;int i=0;
StringTokenizer fenxi=new StringTokenizer(s1," ,");
while(fenxi.hasMoreTokens())
{ String temp=fenxi.nextToken();
try{ a[i]=Double.valueOf(temp).doubleValue();i++;
}
catch(NumberFormatException e)
{
}
}
double p=(a[0]+a[1]+a[2])/2.0;
Double result=new Double(Math.sqrt(p*(p-a[0])*(p-a[1])*(p-a[2])));
String bytes=new String(result.toString());
buffer2=bytes.getBytes();
packet=new DatagramPacket(buffer2,buffer2.length,addr,cport);//生成發送的數據報
socket.send(packet);
sleep(2);
}
catch(Exception ee){}
}
}
protected void finalize(){
if(socket!=null){
socket.close();//關閉socket
System.out.println("連接已經關閉");
}
}
}
public class Computer_server{
public static void main(String[] argc){
UDPServerThread server=new UDPServerThread();
server.start();
}
}

㈢ 怎麼將按TCP協議的網路通信改裝為按UDP協議通信

tcp和udp都是傳輸協議,只是兩者是有區別的,TCP是一種在不可靠的網路環境中進回行可靠的傳輸,一個文件答被分成許多數據包從一台主機傳輸到另外一台主機,每接受一個數據包,兩台主機之間都需要驗證的,如果另外一台主機沒有接收到該數據包,該主機會要求數據包發起的主機重發,一直到接收到為止(當然重發次數也是有次數限制的),這就是TCP協議的傳輸特點。
而udp則是在安全的網路下進行的不可靠傳輸,傳輸之前,雙方主機之間建立起一條專用的傳輸通道,數據包一旦從發起電腦傳輸,之後就不再管對方收沒收到的問題,一直把數據全部傳輸為止,傳輸完了發起主機會自動關閉數據傳輸通道。

㈣ 請教一個將TCP數據包修改為UDP包的問題,高手請進

首先,運行「gpedit.msc」找到計算機配置---管理模板-----網路-----QoS數據包計劃程序-----限制可保留帶寬。然後雙擊「限制可保留帶寬」,將其啟用,將限制數據設置為0。作用不大

㈤ 求助,怎麼將tcp傳輸通信改成udp通信

答:Udp是面向無連接的,把socket函數的SOCK_STREAM改成SOCK_DGRAM,sever斷不用listen和accept函數,client端不用connect函數,保留原來的數據,謝謝。

㈥ e4a怎麼把程序從tcp改成udp協議

使用 Winsock 控制項 利用 WinSock 控制項可以與遠程計算機建立連接,並通過用戶數據文報協議 (UDP)或者傳輸控制協議 (TCP)進行數據交換。這兩種協議都可以用來創建客戶與伺服器應用程序。與 Timer 控制項類似,WinSock 控制項在運行時是不可見的。

閱讀全文

與tcp轉udp程序相關的資料

熱點內容
代碼如何快速做金字塔數據 瀏覽:775
文件異地同步軟體 瀏覽:383
微信網頁版自動登錄 瀏覽:370
excel如何分開男女數據 瀏覽:883
帝豪gl怎麼打開u盤文件夾在哪裡 瀏覽:477
蘋果皮能用流量嗎 瀏覽:548
電腦寬頻連接共享wifi密碼 瀏覽:655
最新微粒貸app官方下載 瀏覽:923
win10電腦怎麼休眠不斷網 瀏覽:530
如何查到網站的伺服器 瀏覽:225
編程怎麼確定一個數的位數 瀏覽:362
如何安裝ae腳本文件夾 瀏覽:914
商品驗偽用什麼APP查 瀏覽:350
請問大數據與會計專業做什麼的 瀏覽:77
如何修改數據上年結轉 瀏覽:6
win7一直配置文件重啟 瀏覽:124
佳能ir2525i網路掃描 瀏覽:283
win10指紋無法識別 瀏覽:646
jsp中怎麼引入js文件 瀏覽:925
文件名構成部分 瀏覽:484

友情鏈接