首页 > 编程语言 >Java套接字编程学习

Java套接字编程学习

时间:2024-02-03 17:02:22浏览次数:23  
标签:Java Socket 编程 socket import new 接字 服务端 客户端

一、前言

Java套接字编程用于不同JRE上运行的应用程序之间进行通信,可以是面向连接或无连接的。Socket类和ServerSocket类用于面向连接的套接字编程,DatagramSocket类和DatagramPacket类用于无连接的套接字编程。我们需要根据服务器IP地址和端口号来区分套接字。Socket类用于客户端和服务器之间的通信,我们可以读取和写入消息。ServerSocket类用于服务器端。

二、方法介绍

Socket类

方法

描述

getInputStream()

返回此套接字的InputStream

getOutputStream()

返回此套接字的OutputStream

close()

关闭这个套接字

ServerSocket类

方法

描述

accept()

返回套接字并在服务器和客户端之间建立连接

close()

关闭服务器套接字

三、单向通信

服务端

package learn;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author qx
 * @date 2024/1/18
 * @des Socket服务端
 */
public class MyServer {
    public static void main(String[] args) throws IOException {
        // 建立连接 用于客户端和服务端之间的通信
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket socket = serverSocket.accept();
        DataInputStream dis = new DataInputStream(socket.getInputStream());
        String data = dis.readUTF();
        System.out.println("message=" + data);
        serverSocket.close();
    }
}

客户端

package learn;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

/**
 * @author qx
 * @date 2024/1/18
 * @des Socket客户端
 */
public class MyClient {
    public static void main(String[] args) throws IOException {
        // 连接服务端
        Socket socket = new Socket("localhost", 8888);
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        // 发送数据
        dos.writeUTF("hello world");
        dos.flush();
        dos.close();
    }
}

我们先启动服务端接收来着客户端的数据,然后启动客户端发送数据。

Java套接字编程学习_Socket

然后启动客户端

Java套接字编程学习_Socket_02

最后我们在服务端的控制台接收到来着客户端发送的数据。

Java套接字编程学习_Socket_03

四、双向通信

具体的流程是客户端向服务端写入数据,服务端接收并打印该数据,然后向客户端写入数据,客户端接收数据并打印该数据。

服务端

package learn;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author qx
 * @date 2024/1/18
 * @des Socket服务端
 */
public class MyServer {
    public static void main(String[] args) throws IOException {
        // 建立连接 用于客户端和服务端之间的通信
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket socket = serverSocket.accept();

        DataInputStream dis = new DataInputStream(socket.getInputStream());
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = "", str2 = "";
        while (!"stop".equals(str)) {
            str = dis.readUTF();
            System.out.println("client say:" + str);
            str2 = br.readLine();
            dos.writeUTF(str2);
            dos.flush();
        }
        dis.close();
        socket.close();
        serverSocket.close();
    }
}

客户端

package learn;

import java.io.*;
import java.net.Socket;

/**
 * @author qx
 * @date 2024/1/18
 * @des Socket客户端
 */
public class MyClient {
    public static void main(String[] args) throws IOException {
        // 连接服务端
        Socket socket = new Socket("localhost", 8888);
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        DataInputStream dis = new DataInputStream(socket.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = "", str1 = "";
        while (!"stop".equals(str)) {
            str1 = br.readLine();
            dos.writeUTF(str1);
            dos.flush();

            str = dis.readUTF();
            System.out.println("server says:" + str);

        }
        dos.close();
        socket.close();
    }
}

我们和之前一样先启动服务端接收数据,然后启动客户端。在客户端输入要发送的消息。

Java套接字编程学习_Socket_04

服务端接收到来着客户端的消息。

Java套接字编程学习_Socket_05

然后服务端输入并发送消息给客户端。

Java套接字编程学习_Socket_06

客户端接收到服务端的消息并打印。

Java套接字编程学习_Socket_07

结束通信:

客户端输入stop结束通信。

Java套接字编程学习_Socket_08

服务端接收到stop消息,并发送stop消息,停止服务端。

Java套接字编程学习_Socket_09

最后客户端接收到stop消息,停止客户端。

Java套接字编程学习_Socket_10

标签:Java,Socket,编程,socket,import,new,接字,服务端,客户端
From: https://blog.51cto.com/u_13312531/9569866

相关文章

  • Java生成微信小程序二维码的方式有哪些?
    大家好我是咕噜美乐蒂,很高兴又见面啦!今天我们来谈一下如何使用Java生成微信小程序二维码,有哪些方式方法呢?生成微信小程序二维码是开发微信小程序时的常见需求之一。在Java中,我们可以使用多种方式来生成微信小程序二维码。本文将为您介绍几种常用的方式。一、使用第三方库1.zxingzxi......
  • linux的java服务启动,停止sh脚本
    #!/bin/bash#######################################################Copyright2019PhamNgocHoai##LicensedundertheApacheLicense,Version2.0(the"License");#youmaynotusethisfileexceptincompliancewiththeLicense.#Youmay......
  • Java 中的Map集合
    Map1.Map接口中常用的方法importjava.util.Collection;importjava.util.HashMap;importjava.util.Map;/*java.util.Map接口中常用的方法:Map和Collection没有继承关系Map集合以key和value的方式存储数据:键值对key和value都是引用数据类型key和value都是存储对象的地......
  • 如何在 JavaScript 中验证 URL
    如何在JavaScript中验证URL统一资源定位符URL(UniformResourceLocator)引导你进入互联网上的一个页面或文件。URL是互联网上事物的地址。所有有效的URL都遵循某些模式。因此,如果你知道这些模式,你就可以在你的程序中确定一个URL是否有效,并给出反馈、抛出一个错误,等等。......
  • Python小白入门指南:从零开始掌握Python编程
    你是否曾想过用代码操控电脑、制作自动化任务,或者探索数据的奥秘?今天,我要带你进入Python的世界,为你揭开编程的神秘面纱。不论你是编程零基础,还是想学习一门新技能,这篇文章都将是你学习Python的得力助手。一、Python是什么?为什么要学Python?Python是一种高级、动态类型的编程语言,它的......
  • java项目启动脚本
    #!/bin/sh##javaenv##API_NAME:包名API_NAME=dsJAR_NAME=`ls$API_NAME*.jar`#PID代表是PID文件PID=$API_NAME\.pid#使用说明,用来提示输入参数usage(){echo"Usage:sh执行脚本.sh[start|stop|restart|status]"exit1}#检查程序是否在运行is_ex......
  • java中如何获取Stream流
    在Java中获取Stream流主要有以下几种方式:通过集合类(Collection)获取:所有的java.util.Collection接口的实现类,包括List,Set,和Queue等,都可以使用.stream()方法来获取一个Stream。例如:List<String>list=Arrays.asList("a","b","c");Stream<String>streamOfList=......
  • 关于java时间类型和格式化到微秒问题
    常规的问题此处略,因为网络上到处都是,这里主要讨论三个问题:1.数据库的时间戳类型(含微秒)对应java的什么类型java的常见时间类型比较多:java.util.Datejava.sql.Datejava.sql.Timestampjava.util.Calendarjava.time.LocalDatejava.time.LocalTimejava.time.LocalDateTime......
  • java字节码指令
    java字节码指令  概要  众所周知,Java字节码是跨平台的,因此Java才能一次编译,处处运行。关于JVM和字节码的认识分成2个部分:  1.JVM(JavaVirtualMachine,Java虚拟机)是Java程序运行的虚拟计算机。它是Java平台的一部分,负责解释和执行Java字节码,并提供一种跨平台的运行......
  • 狂神说Java Web学习笔记_JSP
    什么是JSPJSP(JavaServerPages):Java服务器端页面,和Servlet一样,用于动态web技术!写JSP就像在写HTML。它们之间不同的是,JSP页面里可以嵌入Java代码,提供动态数据。JSP原理IDEA使用tomcat服务器,会在tomcat中产生一个work目录;C:\Users\winner\AppData\Local\JetBrains\IntelliJId......