2022-08-11 第4组 蒋萍 TCP和UDP传输数据代码示例

网络编程

  • UDP传输数据
/* 发送方 */
public static void main(String[] args) throws IOException {
    // 创建发送端Socket对象(DatagramSocet)
    DatagramSocket socket = new DatagramSocket();
    // 创建要发送数据
    byte[] bys = "hello,UDP,我来了".getBytes();
    // 创建数据,并把数据打包
    // DatagramPacket(byte[] buf, int length, InetAddress address, int po
    // 构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
    DatagramPacket dp =
        new DatagramPacket(bys,
                           bys.length,
                           InetAddress.getByName("127.0.0.1"),
                           12345);
    // 释放资源
    socket.send(dp);
    socket.close();
}



/* 接收方 */
public class ReceiveDemo {
	public static void main(String[] args) throws IOException {
		//接收端和发送端端口号必须一致
		DatagramSocket ds=new DatagramSocket(12345);
		while (true){
		//创建一个数据包
		byte[] bys=new byte[1024];
		DatagramPacket dp=new DatagramPacket(bys,bys.length);
		//调用DatagramSocket对象方法接收
		ds.receive(dp);
			//解析数据包,并把数据在控制台显示输出
		System.out.println("数据是:"+new String(dp.getData()));
	}
}	
  • TCP传输
/* 客户端:发送数据,接受服务器反馈 */
public static void main(String[] args) throws IOException {
    System.out.println("客户端发送数据");
    // 1.Socket(ip,port)确定连接到哪里
    Socket socket = new Socket("localhost",6666);
    // 2.获取流对象,输出流
    OutputStream os = socket.getOutputStream();
    // 3.组装数据
    os.write("你好 TCP,我来了".getBytes());
    System.out.println("========接收并回写==========");
    // 4.通过Socket,获取输入流对象
    InputStream in = socket.getInputStream();
    // 5.读写数据
    byte[] b = new byte[100];
    int len = in.read(b);
    System.out.println(new String(b,0,len));
    // 6.关闭资源
    in.close();
    os.close();
    socket.close();
}

/* 服务器:收到消息后给出反馈 */
public static void main(String[] args) throws IOException {
    System.out.println("服务器端启动,等待连接.....");
    // 1.创建ServerSocket对象,绑定端口,开始等待连接
    ServerSocket ss=new ServerSocket(6666);
    // 2.接收accept方法,返回的是Socket对象
    Socket serverSocket=ss.accept();
    // 3.通过socket获取输入流
    InputStream is=serverSocket.getInputStream();
    // 4.一次性读取数据
    // 4.1创建了字节数组
    byte[] b=new byte[1024];
    // 4.2 将数据读取到字节数组中
    int len=is.read(b);
    // 4.3 解析数组,打印字符串信息
    String msg=new String(b,0,len);
    System.out.println(msg);
    System.out.println("===========回写数据==============");
    // 5 通过socket获取输出流
    OutputStream out= serverSocket.getOutputStream();
    // 6.回写数据
    out.write("我很好,谢谢你".getBytes());
    // 7.关闭资源
    is.close();
    ss.close();
}
posted @ 2022-08-11 21:28  来日可追  阅读(26)  评论(0编辑  收藏  举报