發(fā)送步驟:
創(chuàng)新互聯(lián)公司基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報價,主機(jī)托管價格性價比高,為金融證券行業(yè)資陽托管服務(wù)器,ai人工智能服務(wù)器托管提供bgp線路100M獨享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。
使用 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);??//實例化套間字,指定自己的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)視接受端口。
定義一個數(shù)據(jù)包(DatagramPacket),儲存接收到的數(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);//定義一個接收的包??
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)閉資源?????
}??
}
UDP 是廣播的,如果是做實時的聊天,就開兩個線程、不需要服務(wù)器端。一個專門接收、一個做發(fā)送
java里怎么發(fā)廣播
public void onReceive(Context context,Intent intent){
Intent intent = new Intent(context,XxxService.class);
context.startService(intent);
}
Intent intent = new Intent();
intent.setAction("...");
Context.sendBroadcast(intent);
創(chuàng)建兩個類 分別添加main方法 一個作為server類一個作為client類
客戶端先發(fā)送再接收 ?服務(wù)器端先接收再發(fā)送
下面給你一個server和client的例子 你在基礎(chǔ)上改一下就行了
client發(fā)送的時候發(fā)送三邊值 ?server接收后 寫一個計算三角形面積的函數(shù) 把接收到的三邊值傳入函數(shù)計算出結(jié)果作為數(shù)據(jù)返回到client端
/**
*UDPServer
*/
import?java.io.*;
import?java.net.*;
class?UDPServer{
public?static?void?main(String[]?args)throws?IOException{
DatagramSocket??server?=?new?DatagramSocket(5050);
byte[]?recvBuf?=?new?byte[100];
DatagramPacket?recvPacket?
=?new?DatagramPacket(recvBuf?,?recvBuf.length);
server.receive(recvPacket);
String?recvStr?=?new?String(recvPacket.getData()?,?0?,?recvPacket.getLength());
System.out.println("Hello?World!"?+?recvStr);
int?port?=?recvPacket.getPort();
InetAddress?addr?=?recvPacket.getAddress();
String?sendStr?=?"Hello?!?I'm?Server";
byte[]?sendBuf;
sendBuf?=?sendStr.getBytes();
DatagramPacket?sendPacket?
=?new?DatagramPacket(sendBuf?,?sendBuf.length?,?addr?,?port?);
server.send(sendPacket);
server.close();
}
}
/**
*UDPClient
*/
import?java.io.*;
import?java.net.*;
class?UDPClient{
public?static?void?main(String[]?args)throws?IOException{
DatagramSocket?client?=?new?DatagramSocket();
String?sendStr?=?"Hello!?I'm?Client";
byte[]?sendBuf;
sendBuf?=?sendStr.getBytes();
InetAddress?addr?=?InetAddress.getByName("127.0.0.1");
int?port?=?5050;
DatagramPacket?sendPacket?
=?new?DatagramPacket(sendBuf?,sendBuf.length?,?addr?,?port);
client.send(sendPacket);
byte[]?recvBuf?=?new?byte[100];
DatagramPacket?recvPacket
=?new?DatagramPacket(recvBuf?,?recvBuf.length);
client.receive(recvPacket);
String?recvStr?=?new?String(recvPacket.getData()?,?0?,recvPacket.getLength());
System.out.println("收到:"?+?recvStr);
client.close();
}
}
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
{
//指定端口號,避免與其他應(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ù)的長度,可使接收數(shù)據(jù)正常顯示,開始時很容易忽略這一點
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();
}
}