java网络编程中的TCP与UDP通信

java网络编程中的TCP与UDP通信

在网络编程中要实现通信即传输信息主要两种方式:TCP(面向连接)和UDP(面向无连接).
TCP:
通信时需要双方建立连接,中途不能断开,实时传输.
客户端:

Socket socket =null;//两端通过socket(套接字)进行联系
OutputStream outputStream =null;
InetAddress address = InetAddress.getByName("127.0.0.1");//创建一个目标IP的对象
int port=9999;//发送的端口,可自己选择没有被占用端口
socket = new Socket(address, port);//创建流套接字并将其连接到指定IP地址的指定端口号。 
outputStream = socket.getOutputStream();//socket的输出流
outputStream.write("hello".getBytes());//将要传输的信息以字节流传输
outputStream.close();
socket.close();

存在报错需抓取异常下同.
服务器端:

Socket socket=null;//和客户端socket为同一个借此联系两端
ServerSocket serverSocket =null;
InputStream inputStream=null;
ByteArrayOutputStream bao=null;
serverSocket = new ServerSocket(9999);//创建绑定到指定端口的服务器套接字.
socket = serverSocket.accept();//侦听要连接到此套接字并接受它。监听客户端是否发送
inputStream = socket.getInputStream();//socket的接收流
byte[] bytes = new byte[1024];//接收字节流数组
int len;
bao = new ByteArrayOutputStream();//该类实现了将数据写入字节数组的输出流(将字节流转化为字符串)
while ((len = inputStream.read(bytes)) != -1) {
bao.write(bytes, 0, len);
}
System.out.println(bao.toString());//后面还有各个对象的关闭代码省略


运行时要先开启服务器端后开启客户端(不然发送没法接受).

UDP:
通信时两边无需建立实时连接,发送方和接收方通过发送接收数据包传输信息.
双方都可以是发送方或接收方
发送方:

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class udpsend {
    public static void main(String[] args)throws Exception {
DatagramSocket socket = new DatagramSocket(9999);//建立数据包接收的端口
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//类似于Scanner,可读取空格,制表符等Scanner不可读的字符.
while(true) {
String s = reader.readLine();
DatagramPacket packet = new DatagramPacket(s.getBytes(), 0, s.getBytes().length, InetAddress.getByName("127.0.0.1"), 8888);//建立一个数据报包前三个参数分别为装入的内容,位置,长度,后两个参数为发送目的地的IP及接收端口
socket.send(packet);//发送数据报包
if(s.equals("end"))break;//如果发送的位end结束通信
}
reader.close();
socket.close();
    }
}

接收方:

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

public class udprevice {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(8888);

        while (true){
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] bytes = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length);
        socket.receive(packet);//接收数据包
        outputStream.write(packet.getData());// 写入缓冲区
        System.out.println(outputStream.toString().trim());//trim()函数可将读取到字符的左右空格符号去除,防治后面多余字节全部输出为空格
        if(outputStream.toString().trim().equals("end"))break;//如果对方发送end结束通信
        outputStream.close();
        }

        socket.close();
    }
}

需先开启接收方.
通过上面两种方式可发现TCP主要是通过socket套接字建立连接再通过流进行数据通信,而UDP主要是通过创建DatagrmPacket数据报包通过发送接收包进行数据通信.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值