TCP通信与UDP通信

本文深入解析了TCP和UDP两种网络通信协议的工作原理与应用场景。详细介绍了TCP的客户端和服务端如何进行点对点通信,包括消息的发送与接收流程,以及UDP如何实现无需连接即可直接发送消息的特性。强调了在运行时两端的端口号保持一致的重要性。

TCP通信

TCP:控制两个网络设备之间的点对点通信,两端分别是客户端与服务端

客户端(Client)

发送消息的一端

//发送
public static void main(String[] args) throws Exception {
		//获取本机地址
		InetAddress localHost = InetAddress.getLocalHost();
		String hostAddress = localHost.getHostAddress();
		//设置端口号
		int port=null;
		Socket socket=new Socket(hostAddress, port);
		OutputStream outputStream = socket.getOutputStream();
		outputStream.write("需要发送的消息".getBytes());
		//关闭
		outputStream.close();
		socket.close();
		}

服务端(Server)

接收消息的一端

		//接收
public static void main(String[] args) throws Exception {
     //此端口必须与客户端保持一致
   	int port=null;
   	ServerSocket serverSocket=new ServerSocket(port);
   	Socket accept = serverSocket.accept();
   	InputStream inputStream = accept.getInputStream();
   	byte[] byteArray=new byte[1024*1];
   	int len=inputStream.read(byteArray);
   	String arr=new String(byteArray, 0, len);
   	System.out.println("收到的消息是:"+arr);
   	//查看消息的来源
   	String hostAddress = serverSocket.getInetAddress().getHostAddress();
   	System.out.println("消息来自于:"+hostAddress);
   	//关闭
   	inputStream.close();
   	serverSocket.close();	

客户端的接收消息

//客户端中的接收
   	InputStream inputStream = socket.getInputStream();
   	byte[] byteArray=new byte[1024*1];
   	int len=inputStream.read(byteArray);
   	String string=new String(byteArray, 0, len);
   	System.out.println("回复的消息是:"+string);
   	//关闭
   	inputStream.close();

服务端的发送消息

    OutputStream outputStream = accept.getOutputStream();
  	outputStream.write("需要发送的消息".getBytes());
  	//关闭
  	outputStream.close();

注释

1)运行时要先打开服务端,后打开客户端
2)两端的端口号必须保持一致
3)程序结束是,必须要对其关闭

UDP通信

只需要接收方的IP和Port,就可以直接发送,不需要先连接;其中每个程序都可以是服务器也可以是客户端

发送消息

public static void main(String[] args) throws IOException {
		DatagramSocket datagramSocket = new DatagramSocket();
		int port = 端口号;
		//获取主机地址
		InetAddress address = InetAddress.getLocalHost();
		String message = "需要发送的消息";
		byte[] bytes = message.getBytes();
		int length = bytes.length;
		DatagramPacket datagramPacket = new DatagramPacket(bytes, length, address, port);
		datagramSocket.send(datagramPacket);
	//关闭
		datagramSocket.close();

接收消息

public static void main(String[] args) throws IOException {
		int port=端口号;
		DatagramSocket serverSocket=new DatagramSocket(port);
		byte[] byteArray=new byte[1024*3];
		int len=byteArray.length;
		DatagramPacket datagramPacket=new DatagramPacket(byteArray, len);
		//接收
		serverSocket.receive(datagramPacket);
		byte[] byteArr=datagramPacket.getData();
		int length = datagramPacket.getLength();
		String message=new String(byteArr, 0, length);
		System.out.println(message);
		//关闭
		serverSocket.close();

注释

1)两端的端口号要保持一致
2)对流进行关闭
3)先运行服务端,再运行客户端

相关关键字

TCP:socket、sereverSocket、accept
UDP:datagramSocket、datagramPacket、send、receive

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值