Java网络编程

在计算机网络通信中,UDP协议和TCP协议是两种最常用的通信协议

UDP协议常被用于对速度要求高,对数据的传输准确率不那么高的环境下如视频对话等

而TCP协议常用于对传输重要信息,对信息的精确率要求高,尽管速度不如UDP传输

使用Java进行UDP传输通信:

1.数据发送端

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class MyClass {
    public static void main(String[] args) throws IOException {
        InetAddress inetAddress=InetAddress.getByName("127.0.0.1");//创建目标地址对象,使用静态方法创建
        DatagramSocket ds=new DatagramSocket();//创建发送端对象
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("please input your Messages");
            String msg=sc.nextLine();
            if(msg.equals("886")){
                break;
            }
            byte[] bytes = msg.getBytes();//将要发送的字符串信息转换成字节数组
            DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inetAddress,10086);//创建数据包对象
            ds.send(dp);//发送数据
        }
        ds.close();
    }
}

五步:

1.创建目标地址(要指定接收地址)

2.创建发送端对象(无参表示自动选择空闲端口号进行发送)

3.创建字节数组以及数据包对象(要指定接收对象接收数据的端口号)

4.发送端对象发送数据包

5.关闭发送端

打个比方:

在以上代码中DatagramSocket类相当于快递发送站,因为他写在只负责发送快递,不用指明所在地,用户打包好的DatagramPacket类,可以看作装着数据的包裹发送出去,在包裹打包好时要将物品(String)先转换到bytes数组,打包时要指明物品的大小,以及一个重要的InetAdress类,类似包裹外的地址单,这些都准备好后,DatagramSocket就把包裹send出去。

2.数据接收端

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

public class MyRecieveClass {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(10086);
        byte[] bytes=new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
        while (true) {
            ds.receive(dp);
            byte[] data = dp.getData();
            String hostAddress = dp.getAddress().getHostAddress();
            System.out.println("You have received a message "+new String(data,0,data.length));
            System.out.println("from adress:"+hostAddress);
        }
    }
}

接收端接收数据步骤:

1.创建接收端对象(同时指定接收端口)

2.创建字节数组以及数据包对象,并用字节数组长度指定数据包大小

3.接收端对象接收数据包

4.提取各种包装好的数据包内容

DatagramSocket类相当于快递接收站,创建时就要指定他的门牌地址,并指定一个容器,bytes数组,存储接收到的数据,这里DatagramPacket表示重新给用户包装了一次,发送的数据装到bytes里,之后执行一次receive方法,dp包裹被得到了,再调用方法将其输出

使用Java进行TCP传输通信:

数据发送端:

import java.io.IOException;
import java.io.OutputStream;
import java.net.*;
public class MyClass {
    public static void main(String[] args) throws IOException {
       Socket socket=new Socket("127.0.0.1",12086);
        OutputStream outputStream=socket.getOutputStream();
        outputStream.write("我是".getBytes());
        outputStream.close();
        socket.close();
    }
}

1.创建socket对象,一次性指明目标地址和端口号。

2.获取到socket的输出流ops

3.使用ops流对象写入信息,此处相当于io流输出

4.关闭输出流和socket对象

数据接收端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;

public class MyRecieveClass {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(12086);
        Socket socket=ss.accept();
        InputStream inputStream = socket.getInputStream();
        InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
        BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
        int b;
        while ((b=bufferedReader.read())!=-1){
            System.out.print((char)b);
        }
        socket.close();
        ss.close();
    }
}

1.创建socket对象,一次性指明接收数据的端口号。

2.socket对象执行accept方法,等待数据到达

3.数据到达后,获取到socket方法的inputstream

4.使用输入流读取数据

4.关闭输入流和socket对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值