TCP和UDP Socket

1.tcp协议的编程

 * 1:客户端。步骤
 *         1:创建Socket对象,构造方法里需要指定服务端的ip地址和端口.
 *         Socket socket = new Socket(服务端的ip地址或者InetAddress对象,服务端的端口);
 *         2:如果想要从服务端读取数据,那么就需要获得输入管道:InputStream
 *           如果想将数据写到服务端,则需要获得输出管道:OutputStream
 *             读取数据:  InputStream is = socket.getInputStream();
 *             发送数据:   OutputStream os = socket.getOutputStream();
 *         3:准备数据,用InputStream来读取数据,或者用OutputStream来向服务端写入数据,
 *             读数据 : is.read(数据)
 *             写数据:os.write(数据)
 *         4:关闭流,关闭Socket。
 *             is.close();
 *             os.close();
 *             socket.close();
 * 2:服务端:步骤
 *     1;创建ServerSocket对象,并且指定监听的端口。
 *     ServerSocket ss = new ServerSocket(9999);
 *     2:调用accept方法,监听是否有客户端连接。如果连接上则分配一个Socket.
 *     3:获得Socket的读取管道和输出管道。再进行读取和写入数据。
 *     4:将Socket关闭。
 *     5:将ServerSocket关闭。

2.TCP的发送和接收

* 发送

复制代码
// 创建套接字。它会自动到指定ip地址的指定端口。
Socket socket = new Socket("127.0.0.1", 9999);
// 发送数据。
String str = "tcp,我来了";
// 得到输出管道。
OutputStream os = socket.getOutputStream();
os.write(str.getBytes());
os.close();
socket.close();
复制代码

* 接收

复制代码
ServerSocket ss = new ServerSocket(9999);
//监听是否有客户端连接到本服务器端。如果有连接,则分配一个Socket。
Socket socket = ss.accept();//阻塞式的方法。
//获得输入管道。
InputStream is = socket.getInputStream();
byte[] b =new byte[1024];
//返回本次读取的字节数量。
int length = is.read(b);
System.out.println(new String(b,0,length));
ss.close();
复制代码

3.UDP发送和接收

* 发送

复制代码
InetAddress ia = InetAddress.getLocalHost();//本机地址
Scanner scanner = new Scanner(System.in);
String sendIn = scanner.nextLine();
DatagramSocket socket = new DatagramSocket();
byte[] b = sendIn.getBytes();
DatagramPacket p = new DatagramPacket(b, b.length, ia, 9900);
socket.send(p);
socket.close();   
复制代码

* 接收

DatagramSocket socket = new DatagramSocket(9900);
byte[] b = new byte[1024];
DatagramPacket p = new DatagramPacket(b, b.length);
socket.receive(p);
System.out.println(p.getAddress().getHostAddress()+p.getPort()+(new String(b,0,b.length)));

 

posted @   嘉禾世兴  阅读(281)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示