a=new byte[8192];
創(chuàng)新互聯(lián)專注于喀什企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。喀什網(wǎng)站建設(shè)公司,為喀什等地區(qū)提供建站服務(wù)。全流程按需定制,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
a="沒有該用戶".getBytes();
首先這句的寫法就有大問題了……
你把a(bǔ)先指向了一個(gè)8192長(zhǎng)度的byte數(shù)組 然后馬上又把a(bǔ)指向xxxx.getBytes(),也就是說第一句沒有任何用處
然后你具體的代碼 我已經(jīng)不知道你想做什么了~~~如果你只是想用DatagrameSocket來實(shí)現(xiàn)數(shù)據(jù)傳輸其實(shí)很簡(jiǎn)單的……可以參見orelly的《java網(wǎng)絡(luò)編程》里面的例子 我就不貼了
然后把例子改成多線程的就行了……
UDP也可以和TCP那樣遍歷list然后發(fā)送啊
客戶端向外面開一個(gè)UDP端口接受數(shù)據(jù)報(bào)
然后服務(wù)器這邊要是有消息要發(fā)送就直接發(fā)送數(shù)據(jù)報(bào)包就可以了嘛
UDP都不用保持著連接的,比TCP還簡(jiǎn)單些
另外也可以用組播來實(shí)現(xiàn),搜索下java UDP 組播,你能找到不少實(shí)例性的代碼,也有聊天室的代碼
發(fā)送步驟:
使用 DatagramSocket(int port) 建立socket(套間字)服務(wù)。
將數(shù)據(jù)打包到DatagramPacket中去
通過socket服務(wù)發(fā)送 (send()方法)
關(guān)閉資源
import?java.io.IOException;??
import?java.net.*;??
public?class?Send?{??
public?static?void?main(String[]?args)??{??
DatagramSocket?ds?=?null;??//建立套間字udpsocket服務(wù)??
try?{??
ds?=?new?DatagramSocket(8999);??//實(shí)例化套間字,指定自己的port??
}?catch?(SocketException?e)?{??
System.out.println("Cannot?open?port!");??
System.exit(1);???
}??
byte[]?buf=?"Hello,?I?am?sender!".getBytes();??//數(shù)據(jù)??
InetAddress?destination?=?null?;??
try?{??
destination?=?InetAddress.getByName("192.168.1.5");??//需要發(fā)送的地址??
}?catch?(UnknownHostException?e)?{??
System.out.println("Cannot?open?findhost!");??
System.exit(1);???
}??
DatagramPacket?dp?=???
new?DatagramPacket(buf,?buf.length,?destination?,?10000);????
//打包到DatagramPacket類型中(DatagramSocket的send()方法接受此類,注意10000是接受地址的端口,不同于自己的端口!)??
try?{??
ds.send(dp);??//發(fā)送數(shù)據(jù)??
}?catch?(IOException?e)?{??
}??
ds.close();??
}??
}
接收步驟:
使用 DatagramSocket(int port) 建立socket(套間字)服務(wù)。(我們注意到此服務(wù)即可以接收,又可以發(fā)送),port指定監(jiān)視接受端口。
定義一個(gè)數(shù)據(jù)包(DatagramPacket),儲(chǔ)存接收到的數(shù)據(jù),使用其中的方法提取傳送的內(nèi)容
通過DatagramSocket 的receive方法將接受到的數(shù)據(jù)存入上面定義的包中
使用DatagramPacket的方法,提取數(shù)據(jù)。
關(guān)閉資源。
import?java.net.*;??
public?class?Rec?{??
public?static?void?main(String[]?args)?throws?Exception?{??
DatagramSocket?ds?=?new?DatagramSocket(10000);??//定義服務(wù),監(jiān)視端口上面的發(fā)送端口,注意不是send本身端口??
byte[]?buf?=?new?byte[1024];//接受內(nèi)容的大小,注意不要溢出??
DatagramPacket?dp?=?new?DatagramPacket(buf,0,buf.length);//定義一個(gè)接收的包??
ds.receive(dp);//將接受內(nèi)容封裝到包中??
String?data?=?new?String(dp.getData(),?0,?dp.getLength());//利用getData()方法取出內(nèi)容??
System.out.println(data);//打印內(nèi)容??
ds.close();//關(guān)閉資源?????
}??
}
import java.io.*;
import java.lang.*;
import java.net.*;
public class uclient
{
private DatagramSocket cli;
private DatagramPacket pac;
private byte sb[];
private String sen;
public uclient()
{
Init();
}
public void Init()
{
try
{
//指定端口號(hào),避免與其他應(yīng)用程序發(fā)生沖突
cli=new DatagramSocket(10002);
sb=new byte[1024];
sen="UDP方式發(fā)送數(shù)據(jù)";
sb=sen.getBytes();
pac=new DatagramPacket(sb,sb.length,InetAddress.getByName("localhost"),10005);
cli.send(pac);
}
catch(SocketException se)
{
se.printStackTrace();
}
catch(IOException ie)
{
ie.printStackTrace();
}
}
public static void main(String args[])
{
new uclient();
}
}
接收端數(shù)據(jù):
//加以改進(jìn)代碼,可以改變接收方式
import java.io.*;
import java.lang.*;
import java.net.*;
public class userve
{
private DatagramSocket ser;
private DatagramPacket pac;
private byte rb[];
private String rev;
public userve()
{
Init();
}
public void Init()
{
try
{
ser=new DatagramSocket(10005);
rb=new byte[1024];
pac=new DatagramPacket(rb,rb.length);
rev="";
int i=0;
while(i==0)//無數(shù)據(jù),則循環(huán)
{
ser.receive(pac);
i=pac.getLength();
//接收數(shù)據(jù)
if(i0)
{
//指定接收到數(shù)據(jù)的長(zhǎng)度,可使接收數(shù)據(jù)正常顯示,開始時(shí)很容易忽略這一點(diǎn)
rev=new String(rb,0,pac.getLength());
System.out.println(rev);
i=0;//循環(huán)接收
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
new userve();
}
}
Java UDP通信簡(jiǎn)單實(shí)現(xiàn)
1、Java實(shí)現(xiàn)方式
1)server端
/**
*?UDPserver端
*?*/
public?class?UdpServer?{
//?定義一些常量
private?final?intMAX_LENGTH?=?1024;?//?最大接收字節(jié)長(zhǎng)度
private?final?intPORT_NUM???=?5066;???//?port號(hào)
//?用以存放接收數(shù)據(jù)的字節(jié)數(shù)組
private?byte[]?receMsgs?=?new?byte[MAX_LENGTH];
//?數(shù)據(jù)報(bào)套接字
private?DatagramSocket?datagramSocket;
//?用以接收數(shù)據(jù)報(bào)
private?DatagramPacket?datagramPacket;
public?UdpServer(){
try?{
/*******?接收數(shù)據(jù)流程**/
//?創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字,并將其綁定到指定port上
datagramSocket?=?new?DatagramSocket(PORT_NUM);
//?DatagramPacket(byte?buf[],?int?length),建立一個(gè)字節(jié)數(shù)組來接收UDP包
datagramPacket?=?new?DatagramPacket(receMsgs,?receMsgs.length);
//?receive()來等待接收UDP數(shù)據(jù)報(bào)
datagramSocket.receive(datagramPacket);
/******?解析數(shù)據(jù)報(bào)****/
String?receStr?=?new?String(datagramPacket.getData(),?0?,?datagramPacket.getLength());
System.out.println("Server?Rece:"?+?receStr);
System.out.println("Server?Port:"?+?datagramPacket.getPort());
/*****?返回ACK消息數(shù)據(jù)報(bào)*/
//?組裝數(shù)據(jù)報(bào)
byte[]?buf?=?"I?receive?the?message".getBytes();
DatagramPacket?sendPacket?=?new?DatagramPacket(buf,?buf.length,?datagramPacket.getAddress(),?datagramPacket.getPort());
//?發(fā)送消息
datagramSocket.send(sendPacket);
}?catch?(SocketException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}?finally?{
//?關(guān)閉socket
if?(datagramSocket?!=?null)?{
datagramSocket.close();
}
}
}
}
2)client
/***
*?UDPclientClient端
***/
public?class?UdpClient?{
private?String?sendStr?=?"SendString";
private?String?netAddress?=?"127.0.0.1";
private?final?intPORT_NUM?=?5066;
private?DatagramSocket?datagramSocket;
private?DatagramPacket?datagramPacket;
public?UdpClient(){
try?{
/***?發(fā)送數(shù)據(jù)***/
//?初始化datagramSocket,注意與前面Server端實(shí)現(xiàn)的差別
datagramSocket?=?new?DatagramSocket();
//?使用DatagramPacket(byte?buf[],?int?length,?InetAddress?address,?int?port)函數(shù)組裝發(fā)送UDP數(shù)據(jù)報(bào)
byte[]?buf?=?sendStr.getBytes();
InetAddress?address?=?InetAddress.getByName(netAddress);
datagramPacket?=?new?DatagramPacket(buf,?buf.length,?address,?PORT_NUM);
//?發(fā)送數(shù)據(jù)
datagramSocket.send(datagramPacket);
/***?接收數(shù)據(jù)***/
byte[]?receBuf?=?new?byte[1024];
DatagramPacket?recePacket?=?new?DatagramPacket(receBuf,?receBuf.length);
datagramSocket.receive(recePacket);
String?receStr?=?new?String(recePacket.getData(),?0?,?recePacket.getLength());
System.out.println("Client?Rece?Ack:"?+?receStr);
System.out.println(recePacket.getPort());
}?catch?(SocketException?e)?{
e.printStackTrace();
}?catch?(UnknownHostException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}?finally?{
//?關(guān)閉socket
if(datagramSocket?!=?null){
datagramSocket.close();
}
}
}??
}
本文標(biāo)題:udp通信java代碼,udp通信程序
URL地址:http://vcdvsql.cn/article48/hspchp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、Google、網(wǎng)站內(nèi)鏈、小程序開發(fā)、搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)