您的位置:首页 > 其它

8月3日----UDP通信

2015-08-03 19:50 344 查看

URL

类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。

package com.lingzhuo.udpsocket;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class UrlTest {
public static void main(String[] args) {
try {
URL url = new URL("http://www.baidu.com/");//读取百度首页的信息
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));//以流的形式读取
//openStream() 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
String line = br.readLine();
while(line!=null){
System.out.println(line);
line = br.readLine();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
URL urlImg = new URL("http://pic23.nipic.com/20120831/8727628_093544523138_2.jpg");
File fileImg = new File("d:\\14.jpg");//将图片写入文件
if(!fileImg.exists()){
fileImg.createNewFile();
}
InputStream is = urlImg.openStream();
OutputStream os = new FileOutputStream(fileImg);
byte[] bytes = new byte[1024];
int i = is.read(bytes);
while(i!=-1){
os.write(bytes,0,i);
i=is.read(bytes);
}
os.flush();
os.close();
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


简单的UDP通信

类 DatagramSocket,此类表示用来发送和接收数据报包的套接字。

类 DatagramPacket,此类表示数据报包。数据报包用来实现无连接包投递服务。

//发送端
package com.lingzhuo.udpsocket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Send {
public static void main(String[] args) {
try {
DatagramSocket send = new DatagramSocket();
while (true) {
Scanner sca = new Scanner(System.in);
String s = sca.next();
byte[] array = s.getBytes();
DatagramPacket packet = new DatagramPacket(array, array.length, InetAddress.getByName("192.168.0.54"),12316);
send.send(packet);

System.out.println("开始发送"+s);
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//接收端
package com.lingzhuo.udpsocket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Receive {
public static void main(String[] args) {
try {
DatagramSocket receive = new DatagramSocket(12306);
byte[] array = new byte[1024];
DatagramPacket packet = new DatagramPacket(array, 1024);
while (true) {
receive.receive(packet);
byte[] get = packet.getData();
System.out.println("接收到的信息:" + new String(get));
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}


//用线程写的UDP通信,可以相互发送不限制次数

//发送的线程
package com.lingzhuo.udpThread;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;

public class SendThread implements Runnable{
int port;
DatagramSocket send;
String name;
public SendThread(DatagramSocket send,int port,String name) {
// TODO Auto-generated constructor stub
this.port = port;
this.send =send;
this.name = name;
}

@Override
public void run() {
// TODO Auto-generated method stub

try {
Scanner sca = new Scanner(System.in);
while (true) {

String s = sca.next();
byte[] array = s.getBytes();
DatagramPacket packet = new DatagramPacket(array, array.length, InetAddress.getByName("192.168.0.55"),port);
send.send(packet);
System.out.println("开始向"+name+"发送"+s);
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//接收线程
package com.lingzhuo.udpThread;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class ReceiveThread implements Runnable{
int port;
DatagramSocket receive;
String name;
public ReceiveThread(DatagramSocket receive,int port,String name) {
// TODO Auto-generated constructor stub
this.port=port;
this.receive = receive;
this.name = name;
}

@Override
public void run() {
// TODO Auto-generated method stub

try {

byte[] array = new byte[1024];
DatagramPacket packet = new DatagramPacket(array, 1024);
while (true) {
receive.receive(packet);
byte[] get = packet.getData();
System.out.println(name+"接收到的信息:" + new String(get,0,packet.getLength()));
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//通信的双方
package com.lingzhuo.udpThread;

import java.net.DatagramSocket;
import java.net.SocketException;

public class UDPClient {
public static void main(String[] args) {
int port1 = 12345;
int port2 = 12346;
try {
DatagramSocket sendClient = new DatagramSocket();
DatagramSocket receiveClient = new DatagramSocket(port2);
SendThread thread1 = new SendThread(sendClient, port1,"Server:");
ReceiveThread thread2 = new ReceiveThread(receiveClient, port2,"Client:");
Thread t1 = new Thread(thread1);
Thread t2 = new Thread(thread2);
t1.start();
t2.start();

} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

package com.lingzhuo.udpThread;

import java.net.DatagramSocket;
import java.net.SocketException;

public class UDPServer {
public static void main(String[] args) {
int port1 = 12345;
int port2 = 12346;
try {
DatagramSocket sendServer = new DatagramSocket();
DatagramSocket receiveserver = new DatagramSocket(port1);
SendThread thread1 = new SendThread(sendServer, port2,"Client:");
ReceiveThread thread2 = new ReceiveThread(receiveserver, port1,"Server:");
Thread t1 = new Thread(thread1);
Thread t2 = new Thread(thread2);
t1.start();
t2.start();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: