本文目錄一覽:
- 1、Java udp如何通過一個對象完成接收和發送數據
- 2、能夠使用java的UDP接口傳遞和接收對象嗎
- 3、用JAVA寫一個SOCKET 接收TCP發來的消息
- 4、java怎麼接受對象作為參數的方法?
Java udp如何通過一個對象完成接收和發送數據
//注意,本地ip以及端口,廣播Ip以及端口,可根據自己的電腦實際情況定.我的三段是2
//思路:我用的udp啟動服務端,進行偵聽,如果有消息,就該頻段廣播一次..
//客戶端使用多線程,一個發送服務端,一個接受廣播..就當我複習了一次…!
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.Scanner;
public class UdpTest {
class SendTest{
private int count=1;
private Scanner sc;
private byte[] by,by2;
private InetAddress ip;
private SocketAddress sd1,sd2;
private DatagramSocket ds,ds2;
private DatagramPacket dp,dp2;
SendTest(String ipName,int port) throws Exception{
sc=new Scanner(System.in);
ip=InetAddress.getByName(ipName);
sd1=new InetSocketAddress(ip,port);//發送的目標:ip+端口
sd2=new InetSocketAddress(19823);//己方,省略ip,默認自己本地地址
ds=new DatagramSocket();//參數為自己的標識
//接受
by2=new byte[1024];
ds2=new DatagramSocket(sd2);
send();
}
private void send() throws IOException {
new Thread() {
public void run() {
while(true) {
by=sc.nextLine().getBytes();
dp=new DatagramPacket(by,by.length,sd1);//數組,數組長度,目標ip+端口
try {
ds.send(dp);
} catch (IOException e) {
e.printStackTrace();
}//推送服務;
System.out.println(“老馬第:”+count+++”條信息發送完成!”);
}
}
}.start();
new Thread() {
public void run() {
while(true) {
dp2=new DatagramPacket(by2,by2.length);
try {
ds2.receive(dp2);
System.out.println(“老馬接受到一條廣播可能來自老宋:”+new String(by2,0,dp2.getLength()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
class AccepTest{
private byte[] by;
private SocketAddress sd1,sd2;
private DatagramSocket ds;
private DatagramPacket dp;
private int count=0;
AccepTest() throws Exception{
by=new byte[1024];
sd1=new InetSocketAddress(“192.168.2.255”,19823);//廣播
sd2=new InetSocketAddress(19822);//己方,省略ip,默認自己本地地址
ds=new DatagramSocket(sd2);//參數為自己的標識,這是用來接受的…..
accepts();
}
private void accepts() throws IOException {
while(true) {
count++;
System.out.println(“老宋的服務器接受第:”+count+”次數據:…”);
dp=new DatagramPacket(by,by.length);//數組,數組長度,僅僅用來接收;
ds.receive(dp); //接受服務;
String str=new String(by,0,dp.getLength());
System.out.println(“老宋接受到數據———“+str);
System.out.println();
//廣播..
by=(“插個廣播:”+str+”….誰發的??”).getBytes();
dp=new DatagramPacket(by,by.length,sd1);
ds.send(dp);
}
}
}
public static void main(String[] args) throws Exception {
new Thread() {
public void run() {
try {
new UdpTest().new AccepTest();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
new Thread() {
public void run() {
try {
new UdpTest().new SendTest(“127.0.0.1”,19822);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
能夠使用java的UDP接口傳遞和接收對象嗎
可以做到
//對像變成節數組
ByteArrayOutputStream buffers = new ByteArrayOutputStream();
try{
ObjectOutputStream out = new ObjectOutputStream(buffers);
out.writeObject(你的對像變量);
out.close();
}catch(Exception e){
System.err.print(e.getMessage());
return null;
}
return buffers.toByteArray();//這裡返回的就是你對像的位元組數組了
//位元組數組還原為對像
data[]=…..
你對像的類型 obj;
try{
ByteArrayInputStream buffers = new ByteArrayInputStream(data);
ObjectInputStream in = new ObjectInputStream(buffers);
obj=(你對像的類型) in.readObject(); //obj就是你還原回來的對像了
in.close();
}catch(Exception e){
System.err.print(e.getMessage());
}
用JAVA寫一個SOCKET 接收TCP發來的消息
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
//創建一個ServerSocket在端口4700監聽客戶請求
}catch(Exception e) {
System.out.println(“can not listen to:”+e);
//出錯,打印出錯信息
}
Socket socket=null;
try{
socket=server.accept();
//使用accept()阻塞等待客戶請求,有客戶
//請求到來則產生一個Socket對象,並繼續執行
}catch(Exception e) {
System.out.println(“Error.”+e);
//出錯,打印出錯信息
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,並構造相應的BufferedReader對象
PrintWriter os=newPrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,並構造PrintWriter對象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由系統標準輸入設備構造BufferedReader對象
System.out.println(“Client:”+is.readLine());
//在標準輸出上打印從客戶端讀入的字符串
line=sin.readLine();
//從標準輸入讀入一字符串
while(!line.equals(“bye”)){
//如果該字符串為 “bye”,則停止循環
os.println(line);
//向客戶端輸出該字符串
os.flush();
//刷新輸出流,使Client馬上收到該字符串
System.out.println(“Server:”+line);
//在系統標準輸出上打印讀入的字符串
System.out.println(“Client:”+is.readLine());
//從Client讀入一字符串,並打印到標準輸出上
line=sin.readLine();
//從系統標準輸入讀入一字符串
} //繼續循環
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
server.close(); //關閉ServerSocket
}catch(Exception e){
System.out.println(“Error:”+e);
//出錯,打印出錯信息
}
}
}
java怎麼接受對象作為參數的方法?
對象做參數,傳過去的是地址。 所以你在你調用的方法裏面可以修改對象的某些屬性(值),基本數據類型就不可以。Java中數組也是傳遞地址的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/206801.html