javaudp
1. java udp 有必要用NIO嗎AIO支持UDP嗎
這得看你的程序具體的業務量了。
從性能上來說NIO是比較合適的。AIO比較符合大吞吐量的網路程序。
2. 如何用java實現UDP的可靠傳輸
我記憶中可靠的傳輸應該類似TCP的三次握手:
1.發送方向接收方發送一個隨機數。
2.接收方收到隨機數後將其+1,再回傳給發送方。
3.發送方收到隨機數判斷其是否被+1,如果是代表雙方的傳遞線路是通暢的,可以正式開始傳送數據。
3. java 怎麼用UDP實時接收數據
我自己寫的代碼:
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.SocketException;
importjava.net.UnknownHostException;
publicclassUdpRecvDemo
{
publicstaticvoidmain(String[]args)throwsIOException
{
Recv();
}
publicstaticvoidRecv()throwsIOException
{
System.out.println("接受開始......");
DatagramSocketds=newDatagramSocket(3388);
while(true)
{
byte[]buf=newbyte[1024];
DatagramPacketdp=newDatagramPacket(buf,buf.length);
ds.receive(dp);
System.out.println(ds);
Stringip=dp.getAddress().getHostAddress();
intport=dp.getPort();
Stringtext=newString(dp.getData(),0,dp.getLength());
if(text.equals("exit"))
{
System.out.println(ip+"退出會話......");
break;
}
System.out.println(ip+":"+port+"===>me"+text);
}
ds.close();
}
}
4. java如何發送UDP報文
建議的代碼,這個官網里有例子
5. 我寫了一個Java的UDP網路通訊,就是在本機的時候就可以接收到消息,但是兩台機器就不行了,詳細:
先ping一下對方的ip,看有沒有ping通呢
6. java 中怎麼使用UDP
發送步驟:
使用 DatagramSocket(int port) 建立socket(套間字)服務。
將數據打包到DatagramPacket中去
通過socket服務發送 (send()方法)
關閉資源
importjava.io.IOException;
importjava.net.*;
publicclassSend{
publicstaticvoidmain(String[]args){
DatagramSocketds=null;//建立套間字udpsocket服務
try{
ds=newDatagramSocket(8999);//實例化套間字,指定自己的port
}catch(SocketExceptione){
System.out.println("Cannotopenport!");
System.exit(1);
}
byte[]buf="Hello,Iamsender!".getBytes();//數據
InetAddressdestination=null;
try{
destination=InetAddress.getByName("192.168.1.5");//需要發送的地址
}catch(UnknownHostExceptione){
System.out.println("Cannotopenfindhost!");
System.exit(1);
}
DatagramPacketdp=
newDatagramPacket(buf,buf.length,destination,10000);
//打包到DatagramPacket類型中(DatagramSocket的send()方法接受此類,注意10000是接受地址的埠,不同於自己的埠!)
try{
ds.send(dp);//發送數據
}catch(IOExceptione){
}
ds.close();
}
}
接收步驟:
使用 DatagramSocket(int port) 建立socket(套間字)服務。(我們注意到此服務即可以接收,又可以發送),port指定監視接受埠。
定義一個數據包(DatagramPacket),儲存接收到的數據,使用其中的方法提取傳送的內容
通過DatagramSocket 的receive方法將接受到的數據存入上面定義的包中
使用DatagramPacket的方法,提取數據。
關閉資源。
importjava.net.*;
publicclassRec{
publicstaticvoidmain(String[]args)throwsException{
DatagramSocketds=newDatagramSocket(10000);//定義服務,監視埠上面的發送埠,注意不是send本身埠
byte[]buf=newbyte[1024];//接受內容的大小,注意不要溢出
DatagramPacketdp=newDatagramPacket(buf,0,buf.length);//定義一個接收的包
ds.receive(dp);//將接受內容封裝到包中
Stringdata=newString(dp.getData(),0,dp.getLength());//利用getData()方法取出內容
System.out.println(data);//列印內容
ds.close();//關閉資源
}
}
7. JAVA中如何完成UDP包的封裝
給你一段代碼,或許可以幫到你……
public class SendSideTest {
/*發送數據 */
public static void main(String[] args) throws IOException {
//1 DatagramSocket是用來接收發送數據的
DatagramSocket ds = new DatagramSocket();
//2 發送什麼
byte[] s="helloabcdef".getBytes();
//3 發送到哪,發送到本機
InetAddress clientAddress=InetAddress.getLocalHost();
//4 搭建一個outDataPacket相當於一個郵包
//把發送的內容,發送的地址,發送的埠,寫在郵包上
DatagramPacket op = null;
op=new DatagramPacket(s, s.length,clientAddress, 9999);
//5 通過一個DatagramPacket將數據發送到客戶端,
//客戶端的地址由DatagramPacket指定,即寫在郵包上
ds.send(op);
System.out.println("數據已經成功發送");
}
}
public class ReceiveSideTest {
/* 接收方*/
public static void main(String[] args) throws IOException {
//1 DatagramSocket相當於建立一個伺服器 在9999監聽
DatagramSocket ds = new DatagramSocket(9999);
//2 DatagramPacket是用來接收發送的數據的 要有容器接收
byte[] msg = new byte[100];
DatagramPacket ip = new DatagramPacket(msg, msg.length);
//3調用receive方法接收數據到DatagramPacket 中
//數據又由DatagramPacket放入msg
ds.receive(ip);
String msgs = new String(msg);
System.out.println(msgs);
//4通過DatagramPacket得到地址和埠 把發送者列印出來
InetAddress clientAddress = ip.getAddress();
int clientPort = ip.getPort();
System.out.println("發送者:"+clientAddress);
System.out.println("發送埠:"+clientPort);
}
}
8. java中UDP文件傳輸怎麼實現
java UDP連接,如果要發送文件的話,你只能自己定義一系列的協議
因為TCP UDP 雙方發送都是二進制數據
那麼這個實現非常復雜
得不停的發送數據,寫數據,建議使用http協議
9. 一個簡單java實現udp通信
UDP也可以和TCP那樣遍歷list然後發送啊
客戶端向外面開一個UDP埠接受數據報
然後伺服器這邊要是有消息要發送就直接發送數據報包就可以了嘛
UDP都不用保持著連接的,比TCP還簡單些
另外也可以用組播來實現,搜索下java UDP 組播,你能找到不少實例性的代碼,也有聊天室的代碼
10. 用java實現UDP校驗和計算
public static void main(String[] arg) {
String str = "hello";
System.out.println(toByte(str));
// 得到結果:byte[] sbytes = { 0X68, 0X65, 0X6c, 0X6c, 0X6f };
}
private static String toByte(String str) {
byte[] bytes = str.getBytes();
StringBuffer sb = new StringBuffer();
sb.append("byte[] sbytes = { ");
for (int i = 0; i < bytes.length; i++) {
sb.append(String.format("0X%s", Integer.toHexString(bytes[i])));
if (i < bytes.length - 1) {
sb.append(", ");
}
}
sb.append(" };").append("\r\n");
return sb.toString();
}