java
UDP编程基本步骤
发送端 基本流程:
* 1、使用DatagramSocket 指定端口 创建发送端
* 2、准备数据 一定转成字节数组
* 3、 封装成DatagramPacket 包裹,需要指定目的地
* 4、发送包裹send(DatagramPacket p) *
* 5、释放资源
package Test_Net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class UdpTypeClient {
public static void main(String[] args) throws Exception {
System.out.println("发送方启动中.....");
// 1、使用DatagramSocket 指定端口 创建发送端
DatagramSocket client =new DatagramSocket(8888);
//2、准备数据 一定转成字节数组
String data = "lk12346549879879zmj";
byte[] datas = data.getBytes();
//3、 封装成DatagramPacket 包裹,需要指定目的地
DatagramPacket packet =new DatagramPacket(datas,0,datas.length,
new InetSocketAddress("localhost",6666));
//4、发送包裹send(DatagramPacket p) *
client.send(packet);
// 5、释放资源
client.close();
}
}
/**
* 接收端 基本流程:
* Address already in use: Cannot bind 同一个协议下端口不允许冲突
* 1、使用DatagramSocket 指定端口 创建接收端
* 2、准备容器 封装成DatagramPacket 包裹
* 3、阻塞式接收包裹receive(DatagramPacket p)
* 4、分析数据
* byte[] getData() getLength()
* 5、释放资源
*/
package Test_Net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpTypeSever {
public static void main(String[] args) throws Exception {
System.out.println("接收方启动中.....");
// 1、使用DatagramSocket 指定端口 创建接收端
DatagramSocket server =new DatagramSocket(6666);
// 2、准备容器 封装成DatagramPacket 包裹
byte[] container =new byte[1024*60];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
// 3、阻塞式接收包裹receive(DatagramPacket p)
server.receive(packet); //阻塞式
// 4、分析数据
// byte[] getData()
// getLength()
byte[] datas =packet.getData();
int len = packet.getLength();
System.out.println(new String(datas,0,len));
// 5、释放资源
server.close();
}
}
TCP编程基本步骤:
服务器端:
package Test_Net;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Tcpserver {
public static void main(String[] args) throws IOException {
System.out.println("-------服务器端-------");
// 1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(6778);
// 2、阻塞式等待连接 accept
Socket client = server.accept();
System.out.println("一个用户建立了连接");
// 3、操作: 输入输出流操作
DataInputStream dis = new DataInputStream(client.getInputStream());
String data = dis.readUTF();
System.out.println("发送的内容为:"+data);
// 4、释放资源
dis.close();
client.close();
}
}
客户端:
package Test_Net;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class TcpClient {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
System.out.println("-------客户端--------");
//1、建立连接: 使用Socket创建客户端 +服务的地址和端口
Socket client = new Socket("localhost",6778);
//2、操作: 输入输出流操作
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
//ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
String data =input.next();
dos.writeUTF(data);
dos.flush();
//3、释放资源
dos.close();
client.close();
}
}
需要注意的就是数据流对象的定义和使用,按照步骤和传输对应的数据(或对象【ObjectOutputStream】等)。