基于UTP的Socket编程(基础)

简介: 基于UTP的Socket编程(基础)

User


package com.imooc.UTPReturn;
import java.io.Serializable;
public class User implements Serializable{
  private String username;
  private String password;
  public User(String username, String password) {
    this.username = username;
    this.password = password;
  }
  @Override
  public String toString() {
    return "User [username=" + username + ", password=" + password + "]";
  }
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
}


Server


package com.imooc.UTPReturn;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UTPServer {
  public static void main(String[] args) throws Exception {
    /*
     * 服务器端接收客户端的请求
     */
    // 创建服务器端DatagramSocket
    DatagramSocket socket = new DatagramSocket(8800);
    // 创建数据包
    byte[] data = new byte[1024];
    DatagramPacket packet = new DatagramPacket(data, data.length);
    // 服务器端已经启动...
    System.out.println("服务器端已经 启动....");
    socket.receive(packet);// 接收数据
    // 读取客户端发来的数据
    // String str=new String(data, 0, packet.getLength());
    // System.out.println("我是服务器,客户端说:"+str);
    // bytearray to object
    ByteArrayInputStream bi = new ByteArrayInputStream(data);
    ObjectInputStream oi = new ObjectInputStream(bi);
    User user = (User)oi.readObject();
    bi.close();
    oi.close();
    System.out.println(user.toString());
    /*
     * 服务器端回应客户端
     */
    // 给客户端发出响应
    byte[] responseData = null;
    responseData = "欢迎你".getBytes();
    InetAddress address = packet.getAddress();
    int port = packet.getPort();
    DatagramPacket responsePacket = new DatagramPacket(responseData,
        responseData.length, address, port);
    socket.send(responsePacket);
    // 关闭资源
    socket.close();
  }
}


Client


package com.imooc.UTPReturn;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UTPClient {
  public static void main(String[] args) throws Exception {
    /*
     * 客户端向服务器端发送数据
     */
    // 定义数据报的地址,端口,数据
    InetAddress address = InetAddress.getByName("localhost");
    int port = 8800;
    // 定义数据报的内容
    // byte[] data="用户名admin,密码123".getBytes();
    User user = new User("张三", "123");
    byte[] data = null;
    // object to bytearray
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream oo = new ObjectOutputStream(bo);
    oo.writeObject(user);
    data = bo.toByteArray();
    bo.close();
    oo.close();
    // 创建数据报
    DatagramPacket packet = new DatagramPacket(data, data.length, address,
        port);
    // 创建DatagramSocket对象
    DatagramSocket socket = new DatagramSocket();
    // 发送数据报
    socket.send(packet);
    /*
     * 客户端接收服务器端的回应
     */
    socket.receive(packet);
    String responseStr = new String(data, 0, packet.getLength());
    System.out.println("我是客户端,服务器端回应说:" + responseStr);
  }
}
目录
相关文章
|
4月前
|
缓存 监控 Java
Java Socket编程最佳实践:优化客户端-服务器通信性能
【6月更文挑战第21天】Java Socket编程优化涉及识别性能瓶颈,如网络延迟和CPU计算。使用非阻塞I/O(NIO)和多路复用技术提升并发处理能力,减少线程上下文切换。缓存利用可减少I/O操作,异步I/O(AIO)进一步提高效率。持续监控系统性能是关键。通过实践这些策略,开发者能构建高效稳定的通信系统。
140 1
|
4月前
|
IDE Java 开发工具
从零开始学Java Socket编程:客户端与服务器通信实战
【6月更文挑战第21天】Java Socket编程教程带你从零开始构建简单的客户端-服务器通信。安装JDK后,在命令行分别运行`SimpleServer`和`SimpleClient`。服务器监听端口,接收并回显客户端消息;客户端连接服务器,发送“Hello, Server!”并显示服务器响应。这是网络通信基础,为更复杂的网络应用打下基础。开始你的Socket编程之旅吧!
50 3
|
4月前
|
Java
Java Socket编程与多线程:提升客户端-服务器通信的并发性能
【6月更文挑战第21天】Java网络编程中,Socket结合多线程提升并发性能,服务器对每个客户端连接启动新线程处理,如示例所示,实现每个客户端的独立操作。多线程利用多核处理器能力,避免串行等待,提升响应速度。防止死锁需减少共享资源,统一锁定顺序,使用超时和重试策略。使用synchronized、ReentrantLock等维持数据一致性。多线程带来性能提升的同时,也伴随复杂性和挑战。
81 0
|
4月前
|
安全 Java 网络安全
Java Socket编程教程:构建安全可靠的客户端-服务器通信
【6月更文挑战第21天】构建安全的Java Socket通信涉及SSL/TLS加密、异常处理和重连策略。示例中,`SecureServer`使用SSLServerSocketFactory创建加密连接,而`ReliableClient`展示异常捕获与自动重连。理解安全意识,如防数据截获和中间人攻击,是首要步骤。通过良好的编程实践,确保网络应用在复杂环境中稳定且安全。
82 0
|
3月前
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
33 4
|
3月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
54 2
|
3月前
|
网络协议 程序员 视频直播
|
3月前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
24 3
|
3月前
|
消息中间件 网络协议 网络安全
Python Socket编程:打造你的专属网络通道,基础篇与进阶篇一网打尽!
【7月更文挑战第26天】在网络编程领域,Python以简洁语法和强大库支持成为构建应用的首选。Socket编程为核心,实现计算机间的数据交换。
53 1
|
3月前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解
下一篇
无影云桌面