网络编程:用来实现网络互连的不同计算机上运行的程序可以进行数据交换
1.UDP传输,运行时,先启动接收方(即先运行接收方),后运行发送方
(1)发送Send
1)创建DatagramSocket,随机端口号
2)创建DatagramPacket,指定数据,长度,地址,端口
3)使用DatagramSocket发送DatagramPacket
4)关闭DatagramSocket
(2)接受Receive
1)创建DatagramSocket,指定端口号
2)创建DatagramPacket,指定数组,长度
3)使用DatagramSocket接收DatagramPacket
4)关闭DatagramSocket
5)从DatagramPacket中获取数据
(3)接收方获取ip和端口号
String ip=packet,getAddress().getHostAddress();
int port=packet.getPort();
2.UDP传输的优化
3.UDP传输多线程:发送和接收在一个窗口完成
发送端代码
package pra_23;
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 J_42 {
/**
* @param args
* @throws SocketException
* @throws UnknownHostException
*/
public static void main(String[] args) throws Exception {
//发送端
String str="qqqqqq";
DatagramSocket socket=new DatagramSocket();
DatagramPacket dp=
new DatagramPacket(str.getBytes(),str.getBytes().length, InetAddress.getByName("127.0.0.1"),6666);
socket.send(dp); //把数据发出去
socket.close(); //关闭
//发送端的优化
Scanner sc=new Scanner(System.in);
DatagramSocket socket2=new DatagramSocket();
while(true){
String line=sc.nextLine();
if("quit".equals(line)){
break;
}
DatagramPacket packet2=
new DatagramPacket(line.getBytes(),line.getBytes().length,InetAddress.getByName("127.0.0.1"), 6666);
socket2.send(packet2);
}
socket2.close();
}
}
接收端代码
package pra_23;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class J_43 {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//接收端
DatagramSocket ds=new DatagramSocket(6666);
DatagramPacket dp=new DatagramPacket(new byte[1024], 1024);
ds.receive(dp);
byte[] arr=dp.getData();
int len=dp.getLength();
System.out.println(new String(arr,0,len));
ds.close();
//接收端优化
DatagramSocket ds2=new DatagramSocket(6666);
DatagramPacket dp2=new DatagramPacket(new byte[1024], 1024);
while(true){
ds2.receive(dp2);
byte[] arr2=dp2.getData();
int len2=dp2.getLength();
String ip=dp2.getAddress().getHostAddress();
int port=dp2.getPort();
System.out.println(ip+":"+port+":"+new String(arr2,0,len2));
}
}
}
UDP传输多线程
package pra_23;
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 J_44 {
public static void main(String[] args) throws Exception{
new Receive().start();
new Send().start();
}
}
class Receive extends Thread{
public void run(){
try {
DatagramSocket ds2=new DatagramSocket(6666);
DatagramPacket dp2=new DatagramPacket(new byte[1024], 1024);
while(true){
ds2.receive(dp2);
byte[] arr2=dp2.getData();
int len2=dp2.getLength();
String ip=dp2.getAddress().getHostAddress();
int port=dp2.getPort();
System.out.println(ip+":"+port+":"+new String(arr2,0,len2));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Send extends Thread{
public void run(){
try {
Scanner sc=new Scanner(System.in);
DatagramSocket socket2=new DatagramSocket();
while(true){
String line=sc.nextLine();
if("quit".equals(line)){
break;
}
DatagramPacket packet2=
new DatagramPacket(line.getBytes(),line.getBytes().length,InetAddress.getByName("127.0.0.1"), 6666);
socket2.send(packet2);
}
socket2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}