java中socket实现最简单的客户端与服务端通信(代码片段)

✧*꧁一品堂.技术学习笔记꧂*✧. ✧*꧁一品堂.技术学习笔记꧂*✧.     2023-02-02     377

关键词:

Java中Socket 实现最简单的客户端与服务端通信

引言:因为最近项目中要接入某通信协议接口,基于TCP/IP的socket接口。于是就在本地弄一个最简单的Socket 通信仅供学习。话不多说,直接开摆

客户端代码

package test;

import java.io.*;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Client 
    //java基础类方法的入口
    public static void main(String[] args)throws IOException 
        Socket socket=new Socket();
        //读取流超时的时间设置为3000
        socket.setSoTimeout(3000);
        //连接本地,端口2000;超时时间3000ms
        socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000),3000);
        System.out.println("发起服务器连接---------");
        System.out.println("客户端信息:"+socket.getLocalAddress()+" P:"+socket.getLocalPort());//打印本地服务器地址和本地端口号
        System.out.println("服务端信息:"+socket.getInetAddress()+" P:"+socket.getPort());
        try
            //发送接收数据
            todo(socket);
        catch (Exception e)
            System.out.println("出现异常关闭啦");
        
        //释放资源
        socket.close();
        System.out.println("再见,客户端已退出");
    
    //发送数据的方法
    private  static void todo(Socket client) throws IOException
        //构建键盘输入流
        InputStream in=System.in;
        //把键盘输入流转换为BufferedReader
        BufferedReader input=new BufferedReader(new InputStreamReader(in,"UTF-8"));
        //得到Socket输出流(Client要发送出去给服务器的信息),并转换为打印流
        OutputStream outputStream = client.getOutputStream();
        PrintStream socketPrintStream=new PrintStream(outputStream);
        //得到Socket输入流(Server回复传入Client的信息),并转换为BufferedReader
        InputStream inputStream = client.getInputStream();
        BufferedReader socketBufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
        //判断Server是否想要退出,回复“bye”时是他想要结束对话
        boolean flag=true;
        do 
            //键盘读取一行
            String str = input.readLine();
            //发送到服务器,(通俗就是显示在输入处,在键盘上输入什么,屏幕显示什么)
            //String str = "003099999920220614100000M1S1C0x0a";
            socketPrintStream.println(str);
            //从服务器读取一行,即Server传入回复给Client的信息
            String echo = socketBufferedReader.readLine();
            if("bye".equalsIgnoreCase(echo))
                flag=false;
             else
                //打印到屏幕上,Server回复什么就显示什么
                System.out.println("客户端回复:"+echo);
            
        while(flag);
        //资源释放,关闭对于socket资源
        socketPrintStream.close();
        socketBufferedReader.close();
    

 

服务端代码

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server 
    public static void main(String[] args)throws IOException 
        ServerSocket server=new ServerSocket(2000);
        System.out.println("服务器准备就绪----------");
        System.out.println("服务器信息:"+server.getInetAddress()+" P:"+server.getLocalPort());
        //等待多个客户端连接,循环异步线程
        for(;;) 
            //得到客户端
            Socket client = server.accept();
            //客户端构建异步线程
            ClientHandler clientHandler = new ClientHandler(client);
            //启动线程
            clientHandler.start();
        
    
    /**
     * 客户端消息处理
     */
    //多个客户端需要做异步操作,建立异步处理类
    private static class ClientHandler extends Thread//线程
        private  Socket socket;//代表当前的一个连接
        private boolean flag=true;
        ClientHandler(Socket socket)
            this.socket=socket;
        //构造方法
        //一旦Thead启动起来,就会运行run方法,代表线程启动的部分
        @Override
        public void run()
            super.run();
            //打印客户端的信息
            System.out.println("新客户端发起连接:"+socket.getInetAddress()+" P:"+socket.getPort());
            //在发送过程中会触发一个IO过程,所以需要捕获异常
            try 
                //得到打印流,用于数据输出,服务器回送数据使用,即在屏幕上显示Server要回复Client的信息
                PrintStream socketOutput=new PrintStream(socket.getOutputStream());
                //得到输入流,用于接收数据,得到Client回复服务器的信息
                BufferedReader sockeInput=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
                do 
                    //客户端回复一条数据
                    String str = sockeInput.readLine();
                    if("bye".equalsIgnoreCase(str))
                        flag=false;
                        //回送
                        socketOutput.println("bye");
                    else
                        //打印到屏幕,并回送数据长度
                        System.out.println(str);
                        socketOutput.println("Server回答说:" +str.length());
                    
                while(flag);
                sockeInput.close();
                socketOutput.close();
            catch (Exception e)
                //触发异常时打印一个异常信息
                System.out.println("连接异常断开!!!");
            finally 
                //连接关闭
                try 
                    socket.close();
                 catch (IOException e) 
                    e.printStackTrace();
                
            
            System.out.println("再见,客户端退出:"+socket.getInetAddress()+" P:"+socket.getPort());
        
    

 

 

然后先运行服务端类Server.java,然后再运行Client.java
在客户端控制台输入任意文字,按下回车键即可。

 

java通过实现简单的tcp通信程序来理解tcp通信

...两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)。 两端通信的步骤服务端程序,需要事先启动,等待客户端的连接。客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连... 查看详情

java实现tcp通信

...子上修改而成的.其实原理很简单的,就是一个服务端一个客户端,服务端这边创建好ServerSocket后,使用accept()堵塞一直等待客户端发送socket.好吧,不废话了.进正题.2.服务端swing的 查看详情

socketapi:一个最简单的服务器和对应的客户端c语言的实现

基于linux,该实例实现了服务端传了一个helloworld给客户端。socket()创建socketbind()绑定socket到IP地址和端口listen()服务器监听客户端的连接connect()客户端连接到服务器accept()应用程序接受完成3次握手的客户端连接send()recv()write()read()... 查看详情

java利用tcp编程实现简单聊天室

...中我们利用ServerSocket类来建立服务端,利用Socket类来建立客户端。这里要注意,在TCP中,Socket实际上是指Ser 查看详情

谁能用c语言写个最简单socket通信服务端和客户端示例

...用Socket实现一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。【服务器端】#include"stdafx.h"#include<stdio.h>#include<winsock2.h>#include<winsock2.h>#defineSERVER_PORT5208//侦听端口voidmain(... 查看详情

java的socket连接,聊天室通信实现(代码片段)

很多小伙伴在读大学的时候都分不清客户端和服务器的区别。简单来说,没有联网功能的程序,都是在玩单机。那么一个程序要怎么才能联网呢?接下来我们来聊聊socket连接。认识socketSocket是应用层与TCP/IP协议族通信... 查看详情

java的socket连接,聊天室通信实现(代码片段)

很多小伙伴在读大学的时候都分不清客户端和服务器的区别。简单来说,没有联网功能的程序,都是在玩单机。那么一个程序要怎么才能联网呢?接下来我们来聊聊socket连接。认识socketSocket是应用层与TCP/IP协议族通信... 查看详情

socket通信

...存放在一个集合中,然后再次建立新的套接字,与另一个客户端建立通信连接,实现将PID计算得到的实际速度值传送到新的客户端中。客户端-1代码:usingSystem;usingSystem.Collectio 查看详情

java实现一个最简单的tomcat服务(代码片段)

...;类中的; 2.如何建立连接? 要通讯,必须要建议socket连接,我们需要使用哪种socket,是根据它使用的哪种协议进行判断的。tcp协议orudp协议?http协议本身属于tcp协议,因此我们选择的socket是基本tcp协议的soc 查看详情

基于java实现hello/hi简单网络聊天程序

...t的概念Socket原理hello/hi的简单网络聊天程序实现服务器端客户端程序执行结果跟踪分析调用栈&LinuxAPI对比创建ServerSocket调用栈图示源码分析Socket绑定调用栈图示源码分析Socket监听调用栈图示源码分析SocketAccept调用栈图示源码... 查看详情

socket-demo的实现(代码片段)

...点及实现方案TCP粘包/拆包1.问题说明2.解决思路3.demo方案客户端或服务端掉线检测功能1.实现思路2.代码实现客户端身份获知、强制身份验证1.实现思路2.代码实现socket异常处理与垃圾线程回收1.实现思路2.代码实现项目结构参考前... 查看详情

socket

现有两台计算机,一台为服务端,一台为客户端,其中服务端的进程要与客户端的进程进行通讯,那么就需要ip地址及端口号,这个通讯过程,在程序层面上,通过socket编程来实现。   一个最简单的Socket连接实例 ... 查看详情

java实现一个hello/hi的简单的网络聊天程序(代码片段)

使用Java的Socket实现客户端和服务器端之间的连接,实现客户端重复发送数据到服务器端的功能。即,用户可以在控制台不断输入内容,并将内容逐一发送给服务端。并在服务端显示。socket定义    网络上的两个程... 查看详情

c#使用socket实现一个socket服务器与多个socket客户端通信

  在分布式调度系统中,如果要实现调度服务器与多台计算节点服务器之间通信,采用socket来实现是一种实现方式,当然我们也可以通过数据存储任务,子节点来完成任务,但是往往使用数据作为任务存储都需要定制开发,要... 查看详情

socket编程的简单实现

关于socket编程的简单实现,主要分成客户端、服务端两个部分。实现如下:1.服务端代码如下,注意:server端要优先于client端启动2.client端代码,以及启动后客户端和服务端之间的简单连接 (自学使用) 查看详情

运用socket实现简单的ssh功能

...cureShell)功能。  首先同样是建立两个端(服务器端和客户端)  需求是:服务器端需要对客户端发送过来的命令进行相应,并将响应内容返回给客户端。  看似很简单的需求,但是如何响应命令行?python官方建议buffer的... 查看详情

java网络-socket(代码片段)

1,Socket的应用java实现tcp通信主要通过Socket类。当客户端想要打开一个连接到服务器的TCP/IP连接时,就要使用到Socket类。socket类只需要被告知连接的IP地址和TCP端口,其余的都有Java实现。假如我们想要打开一个监听服... 查看详情

如何使用java socket实现客户端和服务器之间的文件传输[重复]

】如何使用javasocket实现客户端和服务器之间的文件传输[重复]【英文标题】:howtoachievetransferfilebetweenclientandserverusingjavasocket[duplicate]【发布时间】:2011-06-0822:14:04【问题描述】:我已经实现了简单的TCP服务器和TCP客户端类,它们... 查看详情