socket编程入门

本文详细介绍了TCP与UDP两种网络通信协议的特点与应用场景。通过具体的Java代码示例展示了如何使用这两种协议实现客户端与服务端之间的数据传输。同时,文章还讨论了Socket的基本概念及其在网络通信中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1TCP协议

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/*
 * 1.Tcp协议客户端
	创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
	调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
	输入流可以读取服务端输出流写出的数据
	输出流可以写出数据到服务端的输入流
 */
public class Client {
	public static void main(String[] args) throws Exception{
		//创建socket连接服务器
		Socket socket = new Socket("127.0.0.1", 12345);
		//获取客户端输入流
		InputStream in = socket.getInputStream();
		//获取客户端输出流
		OutputStream out = socket.getOutputStream();
		//读取服务器发过来的数据
		byte[] arr = new byte[1024];
		int len = in.read(arr);
		//将数据转换成字符串
		System.out.println(new String(arr,0,len));
		//客户端向服务端写数据
		out.write("服务器你好,我是客户端".getBytes());
		socket.close();
	}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/*
 * UDP协议接收端
 * 接收Receive
	创建DatagramSocket, 指定端口号
	创建DatagramPacket, 指定数组, 长度
	使用DatagramSocket接收DatagramPacket
	关闭DatagramSocket
	从DatagramPacket中获取数据
 */
public class Receive {
	public static void main(String[] args) throws Exception {
		// 创建码头
		DatagramSocket socket = new DatagramSocket(6666);
		// 创建接收数据集装箱
		DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
		//接收数据放到集装箱
		socket.receive(packet);
		//接收数据
		byte[] arr = packet.getData();
		int len = packet.getLength();
		System.out.println(new String(arr,0,len));
		//关闭socket
		socket.close();	
	}
}

2UDP协议

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*
 * UDP协议发送端
 * 发送Send
		创建DatagramSocket, 随机端口号
		创建DatagramPacket, 指定数据, 长度, 地址, 端口
		使用DatagramSocket发送DatagramPacket
		关闭DatagramSocket
 */
public class Send {
	public static void main(String[] args) throws Exception {
		String message ="what your name?";
		//创建码头
		DatagramSocket socket = new DatagramSocket();
		//创建集装箱
		DatagramPacket packet = 
				new DatagramPacket(message.getBytes(), message.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
		socket.send(packet);
		socket.close();
	}
}

/*
 * TCP协议服务端
	创建ServerSocket(需要指定端口号)
	调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
	调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
	输入流可以读取客户端输出流写出的数据
	输出流可以写出数据到客户端的输入流
 */
public class Server {
	public static void main(String[] args) throws Exception {
		ServerSocket server = new ServerSocket(12345);
		// 接收客户端的请求
		Socket socket = server.accept();
		// 获取服务器输入流
		InputStream in = socket.getInputStream();
		// 获取服务器输出流
		OutputStream out = socket.getOutputStream();
		// 服务器向客户端写出数据
		out.write("百度一下,你就知道".getBytes());
		// 读取客户端发过来的数据
		byte[] arr = new byte[1024];
		int len = in.read(arr);
		// 将数据转换成字符串
		System.out.println(new String(arr, 0, len));
		socket.close();
	}
}

3总结

  1 Socket套接字概述:

      网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。

      通信的两端都有Socket。相当于一个港口,用于发送和接收数据的

      网络通信其实就是Socket间的通信。

      数据在两个Socket间通过IO流传输。

      Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。

  2服务器与客户端的概念

      第一次主动方就是客户端,被动方就是服务器,这些名词,只是一种喻意辞也有可能你们实际上都是客户端

   3两种协议的实际案例

      网络直播就是采用的UDP协议, 信号不好 视频卡了,但是还是一直发送数据,信号恢复了,就直接是信号恢复后的数据了,信号不好那个时间段的数据已经消失了

      游戏一般不采取tcp协议的,因为他没有必须保证数据的完整服务器收到了,就让你移动,服务器没受到,就不让你移动


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值